【问题标题】:How to programmatically measure the elements' sizes in HTML source code using python?如何使用 python 以编程方式测量 HTML 源代码中元素的大小?
【发布时间】:2013-03-17 20:06:48
【问题描述】:

我正在用 python 进行网页布局分析。一项基本任务是以编程方式测量给定 HTML 源代码的元素大小,以便我们可以获得网页语料库的内容/广告比率、广告块位置、广告块大小的统计数据。

一个明显的方法是使用宽度/高度属性,但它们并不总是可用。此外,width: 50% 之类的内容需要在加载到 DOM 后进行计算。所以我猜想将 HTML 源代码加载到 window-size-predefined-browser 中(比如 mechanize 虽然我不确定是否可以设置 window 的大小)是一个很好的尝试方法,但是 mechanize 不支持返回无论如何都是元素大小。

在 python 中是否有任何通用方法(没有宽度/高度属性),最好使用一些库?

谢谢!

【问题讨论】:

  • 伙计,我什至无法让我的元素在 IE 和 Firefox 中呈现相同的大小。如果有一种“官方”的方法来计算尺寸,你可以打赌,有一半的市场会忽略这一点并按照自己的方式进行。
  • 只是为了给你指明一个方向——可能想看看 WebKit 和其他渲染器提供什么作为输出。显然不会得到三叉戟,但 WK / Gecko 可能已经足够好了......
  • @Kevin 您的担忧当然是有道理的。但出于(实证)研究目的,我会坚持使用任何可以做到这一点的浏览器。我知道在 IE 和 Firefox 中,某些元素的大小不一样,我也遇到了麻烦。但这真的有很大的不同吗?我不担心这里有几个像素漂移:)

标签: python html dom


【解决方案1】:

我建议你看看Ghost - 用python编写的webkit web客户端。它支持 JavaScript,因此您可以轻松调用 JavaScript 函数并获取其返回值。 示例展示了如何找出谷歌文本框的宽度:

>>> from ghost import Ghost
>>> ghost = Ghost()
>>> ghost.open('https://google.lt')
>>> width, resources = ghost.evaluate("document.getElementById('gbqfq').offsetWidth;")
>>> width
541.0  # google text box width 541px

【讨论】:

  • 这很有帮助。不过,我希望 Ghost 有一个 API 文档。
【解决方案2】:

要正确获得所有最终尺寸,您需要渲染内容,同时考虑所有 CSS 样式表,可能还有所有 javascript。因此,从 Python 程序中获取大小的唯一方法是在 Python 中使用完整的 Web 浏览器实现,使用可以执行此操作的库,或者远程引导浏览器脱离进程。

后一种方法可以使用 Selenium 工具来完成 - 在此处查看如何从 Python 程序中获取 javascript 表达式的结果:Can Selenium web driver have access to javascript global variables?

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-12-23
    • 2019-04-04
    • 1970-01-01
    • 2012-03-18
    • 2015-03-22
    • 2011-07-05
    相关资源
    最近更新 更多