【问题标题】:Html element position in PythonPython中的HTML元素位置
【发布时间】:2011-05-19 17:13:44
【问题描述】:

我正在使用 lxml.html 在 python 中进行一些 html 解析。在浏览器呈现页面后,我想粗略估计页面内元素的位置。它不必是精确的,但通常是正确的。为简单起见,我将忽略 Javascript 对元素位置的影响。作为最终结果,我希望能够遍历元素(例如,通过 lxml)并找到它们的 x/y 坐标。关于如何做到这一点的任何想法?我不需要继续使用 lxml,我很乐意尝试其他库。

【问题讨论】:

  • 您将需要一个 HTML 渲染引擎来获取此信息。解析器无济于事。
  • 您还需要考虑 CSS 的效果。如今,没有它的内容很少呈现。

标签: python html lxml


【解决方案1】:

带有 webkit 的 PyQt:

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_())

【讨论】:

  • 这太棒了。有没有办法让它对命令行更友好一些,特别是自行退出(或对 url 序列进行操作?我已经删除了 'web.show()' 并放置了一个 'sys.exit(0) ' 在显示元素的末尾。
【解决方案2】:

正如 Sven 所说,您需要一个 HTML 渲染引擎。之前有人问过渲染HTML的问题,可以参考一下。

Python library for rendering HTML and javascript

【讨论】:

    猜你喜欢
    • 2021-12-10
    • 1970-01-01
    • 1970-01-01
    • 2019-04-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多