[PyQt4] CSS Extractor

Iniciado por Once, Enero 02, 2013, 06:31:55 PM

Tema anterior - Siguiente tema

0 Miembros y 1 Visitante están viendo este tema.

You are not allowed to view links. You are not allowed to view links. Register or Login or You are not allowed to view links. Register or Login
Un pequeño script que saca las hojas de estilo externas (incluidas en la etiquetas link de HTML) El código no hace mucho pero necesitaba tener claro el threading en pyqt4 antes de codear algo más "grande" y esto fue lo que salió
Código: python

#!/usr/bin/python
# -*- coding:utf-8 -*-
# Once

from PyQt4 import QtCore, QtGui
import urllib
import time
import sys
import re

URL = ""

class GUI(QtGui.QWidget):
    def __init__(self):
        QtGui.QWidget.__init__(self)
        self.setWindowTitle("CSS Extractor -Once-")
        self.resize(500, 500)

        self.Caja = QtGui.QVBoxLayout()
        self.Caja1 = QtGui.QHBoxLayout()
        self.Caja2 = QtGui.QHBoxLayout()
        self.Caja3 = QtGui.QHBoxLayout()
        self.Barra = QtGui.QHBoxLayout()

        self.Tab = QtGui.QTabWidget()

        self.BtnEnviar = QtGui.QPushButton("Buscar estilos")
        self.connect(self.BtnEnviar, QtCore.SIGNAL("clicked()"), self.Comprobar)

        self.TxtDireccion = QtGui.QLineEdit()
        self.TxtCSS = QtGui.QListWidget()
        self.LblBarra = QtGui.QLabel("")

        self.BtnCancelar = QtGui.QPushButton("Cancelar")
        self.connect(self.BtnCancelar, QtCore.SIGNAL("clicked()"), self.Cancelar)
        self.BtnLimpiar = QtGui.QPushButton("Limpiar")
        self.connect(self.BtnLimpiar, QtCore.SIGNAL("clicked()"), self.Clear)

        self.Caja1.addWidget(QtGui.QLabel("URL:"))
        self.Caja1.addWidget(self.TxtDireccion)
        self.Caja1.addWidget(self.BtnEnviar)

        self.Caja2.addWidget(self.Tab)

        self.Tab.addTab(self.TxtCSS, "General")

        self.Caja3.addWidget(self.BtnCancelar)
        self.Caja3.addWidget(self.BtnLimpiar)

        self.Barra.addWidget(self.LblBarra)

        self.Caja.addLayout(self.Caja1)
        self.Caja.addLayout(self.Caja2)
        self.Caja.addLayout(self.Caja3)
        self.Caja.addLayout(self.Barra)

        self.setLayout(self.Caja)

    def Comprobar(self):
        global URL
        self.Clear()
        URL = str(self.TxtDireccion.text())
        self.Hilo = Thread()
        self.connect(self.Hilo, QtCore.SIGNAL("actualizar"), self.Prueba)
        self.connect(self.Hilo, QtCore.SIGNAL("barra"), lambda X: self.LblBarra.setText(X))
        self.connect(self.Hilo, QtCore.SIGNAL("tab"), self.AddTab)
        self.Hilo.start()

    def Guardar(self):
        print "Guardar"

    def Cancelar(self):
        self.Hilo.terminate()
        self.LblBarra.setText("Cancelado por el usuario")

    def Prueba(self, Data):
        self.TxtCSS.addItem(Data)

    def AddTab(self, Data):
        Data = Data.split("[-*-]")
        self.Tab.addTab(QtGui.QTextEdit(Data[0]), Data[1])

    def Clear(self):
        self.Tab.clear()
        self.TxtCSS.clear()
        self.Tab.addTab(self.TxtCSS, "General")
        self.LblBarra.setText("")

class Thread(QtCore.QThread):
    def __init__(self):
        QtCore.QThread.__init__(self)

    def run(self):
        self.Mostrar(self.Llamar(), 2)

    def __del__(self):
        self.wait()

    def Traer(self, Url, Link):
        try:
            Buffer = urllib.urlopen(Url + Link).read() + "[-*-]" + Link
            self.Mostrar(Buffer, 3)
        except:
            self.Mostrar("Error abriendo la hoja de estilo")

    def Urls(self, Link):
        Buffer = ""
        if Link[:7] == "http://":
            Link = Link
        elif Link[0] == "/":
            Buffer = re.findall("(http://.*?\..*?)/", URL)[0] + "/"
        else:
            Buffer = re.findall("(http://.*/)", URL)[0]
        self.Traer(Buffer, Link)
        return(Link)

    def Links(self, Data):
        Buffer = ""
        Cantidad = 0
        Data = Data.replace("><", ">\r\n<")
        Expresion = re.compile('<link(.*).*?>')
        Resultado = Expresion.findall(Data)
        for i in Resultado:
            if "stylesheet" in i:
                Css = re.findall(" href *= *[\"\'](.*?)[\"|\'] *", i)
                self.Mostrar("Estilo encontrado en:" + Css[0])
                Cantidad += 1
                self.Mostrar(self.Urls(Css[0]), 2)
        self.Mostrar("%d Estilos encontrados" % Cantidad)
        return(Buffer)

    def Llamar(self):
        self.Mostrar("Abriendo web: " + URL)
        try:
            self.Links(urllib.urlopen(URL).read())
        except:
            self.Mostrar("No se pudo abrir la Web")

    def Mostrar(self, Mensaje, Opt=1):
        time.sleep(0.3)
        if Opt == 1:
            self.emit(QtCore.SIGNAL("barra"), Mensaje)
        elif Opt == 2:
            self.emit(QtCore.SIGNAL("actualizar"), Mensaje)
        else:
            self.emit(QtCore.SIGNAL("tab"), Mensaje)

if __name__ == '__main__':
    App = QtGui.QApplication(sys.argv)
    Ini = GUI()
    Ini.show()
    App.exec_()



Saludos!







You are not allowed to view links. You are not allowed to view links. Register or Login or You are not allowed to view links. Register or Login

Excelente, iré a darle un ojo  :o
Mira por donde te vengo a ver 11sex.

Las locas andan de regreso por lo visto :$ .. 

Excelente 21 sep :D
You are not allowed to view links. You are not allowed to view links. Register or Login or You are not allowed to view links. Register or Login


Llaman traidor a la persona que evito que caiga el foro, gente bruta!



Que buen aporte brot, me sirve bastante para checkear el còdigo.

You are not allowed to view links. You are not allowed to view links. Register or Login or You are not allowed to view links. Register or Login
Excelente, iré a darle un ojo  :o
Mira por donde te vengo a ver 11sex.

3Fac2R andas por acà??? xDD

Zalu2
Sólo el conocimiento te hace libre.

You are not allowed to view links. You are not allowed to view links. Register or Login or You are not allowed to view links. Register or Login
Excelente, iré a darle un ojo  :o
Mira por donde te vengo a ver 11sex.

CitarLas locas andan de regreso por lo visto :$ .. 

Excelente 21 sep

Así es cariño, el destino se empeña en tenernos juntos ;)

CitarQue buen aporte brot, me sirve bastante para checkear el còdigo.

Espero te sea útil

Saludos!








You are not allowed to view links. You are not allowed to view links. Register or Login or You are not allowed to view links. Register or Login