2010-12-03 5 views
2

J'utilise lxml.html pour certaines analyses html en python. Je voudrais obtenir une estimation approximative de l'emplacement des éléments dans la page après qu'elle soit rendue par un navigateur. Il ne doit pas être exact, mais généralement correct. Pour simplifier, je vais ignorer les effets de Javascript sur l'emplacement de l'élément. En tant que résultat final, j'aimerais pouvoir parcourir les éléments (par exemple, via lxml) et trouver leurs coordonnées x/y. Des idées sur la façon de faire cela? Je n'ai pas besoin de rester avec lxml et suis heureux d'essayer d'autres bibliothèques.Position de l'élément Html en Python

+3

Vous aurez besoin d'un moteur de rendu HTML pour obtenir ces informations. Un analyseur ne va pas aider. –

+0

Vous devrez également considérer l'effet de CSS. Très peu de contenu est rendu sans elle, ces jours-ci. –

Répondre

5

PyQt avec WebKit:

import sys 
from PyQt4.QtCore import * 
from PyQt4.QtGui import * 
from PyQt4.QtWebKit import * 

class MyWebView(QWebView): 
    def __init__(self): 
     QWebView.__init__(self) 
     QObject.connect(self,SIGNAL('loadFinished(bool)'),self.showelements) 

    def showelements(self): 
     html=self.page().currentFrame().documentElement() 
     for link in html.findAll('a'): 
      print(link.toInnerXml(),str(link.geometry())[18:]) 


if __name__=='__main__': 
    app = QApplication(sys.argv) 

    web = MyWebView() 
    web.load(QUrl("http://www.google.com")) 
    web.show() 

    sys.exit(app.exec_()) 
+0

C'est fantastique. Existe-t-il un moyen d'obtenir un peu plus de convivialité de la ligne de commande, en particulier en abandonnant tout seul (ou en opérant sur une séquence d'URL?) J'ai supprimé 'web.show()' et placé un 'sys.exit (0) 'à la fin des éléments de spectacle. – muckabout