[PyQt4] CSS Extractor

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

Tema anterior - Siguiente tema

0 Miembros y 2 Visitantes están viendo este tema.

No tienes permitido ver los links. Registrarse o Entrar a mi cuenta
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!







No tienes permitido ver los links. Registrarse o Entrar a mi cuenta

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
No tienes permitido ver los links. Registrarse o Entrar a mi cuenta


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.

No tienes permitido ver los links. Registrarse o Entrar a mi cuenta
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.

No tienes permitido ver los links. Registrarse o Entrar a mi cuenta
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!








No tienes permitido ver los links. Registrarse o Entrar a mi cuenta