【发布时间】:2018-07-17 13:05:11
【问题描述】:
我正在尝试在维基百科的弹出窗口中抓取链接的名称。因此,当您在维基百科中悬停一个链接时,它会从该链接的介绍中调出一点 sn-p。我需要抓取这些信息,但我不确定它在源中的位置。当我检查元素时(当它弹出时)这是 html(对于这个例子,我将鼠标悬停在链接“希腊语”上)
<a dir="ltr" lang="en" class="mwe-popups-extract" href="/wiki/Ancient_Greek">
<p>The <b>Ancient Greek</b> language includes the forms of Greek...(a bunch more text)...</p></a>
我需要提取的是 href which = "/wiki/Ancient_Greek" 但是当我不悬停链接时,这段 html 会消失。有没有办法(使用 BS4 和 python)用我正在抓取的源 html 提取这些信息?
编辑:我无法对网页进行额外调用,因为该项目需要很长时间才能运行。如果无论如何要更改我检索源的方式,以便我可以获得有用的弹出信息。这个项目是巨大的,获得这个弹出信息是至关重要的。
非常感谢任何不需要完全重建项目的建议——我正在使用 urllib 来提取源代码(带有请求)和 bs4 来抓取。
【问题讨论】:
-
到目前为止你尝试过什么?你能发布你的代码吗?
-
你不能用 urllib 做到这一点。您需要一个能够执行 javascript(即加载弹出窗口)的 Web 驱动程序,因为在加载弹出窗口之前数据根本不存在于客户端。如果你使用 splinter,你可以 run it with the chrome web driver 这将非常快,并且不会真正打开网络浏览器窗口。
-
@jstein123 for splinter,与 bs4 相比如何。我的整个平台都使用 bs4 进行抓取。 (让我们知道这个平台有超过 35,000 行代码,如果涉及重建,简单的切换并不容易)
-
你会使用像 urllib 这样的 splinter(即实际抓取数据)。 bs4 用于从已经抓取的数据中提取信息,因此一旦从带有 splinter 的弹出窗口中获取数据,您仍然会使用 bs4。从 splinter 返回的数据将是原始 html,就像 urllib 一样。
-
一旦您使用 splinter 将鼠标悬停在弹出窗口上以将其弹出,您只需执行
browser.html即可获取页面的 html,然后使用 bs4 查找并提取弹出 html。跨度>
标签: python beautifulsoup