【问题标题】:Parse HTML from DOM (Not static HTML)从 DOM 解析 HTML(不是静态 HTML)
【发布时间】:2023-03-19 02:15:01
【问题描述】:

尝试从 DOM 解析 HTML 数据,当我使用 Chrome 的开发者工具时,我可以在控制台中看到该数据。当我在本地将页面保存为 HTML 并搜索目标数据时,找不到它。我已经阅读了一些关于静态 HTML 文件是如何被浏览器接收的,以及 Javascript 将如何以不同方式呈现它以进行演示的阅读。

具体示例:谷歌“nba”,结果在页面顶部包含一个表格,其中包含嵌套在<tbody> 中的当天所有预定比赛,如果您保存此页面,则 HTML 文件不包含@ 987654322@ 标签。尝试使用 BeautifulSoup4 和 Python 解析这个游戏表。

【问题讨论】:

  • 我不认为你可以让 Chrome 以一种简单的方式保存当前的 DOM 状态。 IIRC Firefox 可以做到这一点,您可以使用 Web 检查器通过右键单击元素将 DOM 复制为 HTML 并将其保存到文件中。
  • 除了让 BeautifulSoup4 作用于保存的文件之外,您还可以使用驱动真实浏览器(因此支持 Javascript/AJAX)的工具进行屏幕截图。 Ruby 和 PhantomJS 的 WATIR 和朋友都是这样工作的。
  • 你也可以寻找合适的 API 来直接获取你想要的数据,而不是屏幕截图。
  • 您可以为此编写一个简单的浏览器插件。这也将使解析数据变得容易,因为您可以使用 DOM 方法从页面上获取内容。
  • @millimoose,感谢您提供的信息,正如马特猜测的那样,我正在尝试以编程方式进行操作。 API 数据提供者不起作用,因为我只是以 NBA 为例来学习 HTML 解析。

标签: javascript html html-parsing beautifulsoup


【解决方案1】:

要完全以编程方式执行此操作,您需要run a headless browser——它可以像您的真实浏览器一样执行 JavaScript。 Ghost.py 可以让这更容易。

否则,您可以使用浏览器内置的开发者工具 as millimoose suggests,并将当前 DOM 状态保存为 HTML。

【讨论】:

  • 旨在完全以编程方式配置ghost.py,并使用以下测试代码:from ghost import Ghost ghost = Ghost() page, resources = ghost.open('http://www.google.ca/#output=search&q=nba') print page.__dict__ 但我没有看到任何需要解析的HTML内容,有什么我在不见了?
  • 也许,在使用 httpresource 对象时遇到了一些困难。我可以看到字典包含 URL、标题、回复和 http_status。我猜我必须以某种方式提取回复,并以某种方式将其转换为 HTML 数据?
  • 感谢您的帮助,我现在有一个在 JS 作用于它之前看起来像 HTML 的字符串(比如我从浏览器保存它时),但仍然不是我要解析的内容(比如在 Chrome 的 DOM 检查器中)。我知道我必须使用 ghost.evaluate 来执行 JS,但不确定脚本参数要使用什么。
猜你喜欢
  • 1970-01-01
  • 2012-12-04
  • 2013-02-15
  • 1970-01-01
  • 2016-03-20
  • 2015-08-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多