作者:手机用户2602926791 | 来源:互联网 | 2022-12-10 13:49
我试图在维基百科的弹出窗口中删除链接的名称.因此,当您在维基百科中悬停链接时,它会从该链接的介绍中显示一些小片段.我需要抓取这些信息,但我不确定它在源头中的位置.当我检查元素时(因为它弹出)这是html(对于这个例子,我将鼠标悬停在链接"希腊语"上)
我需要提取的是href ="/ wiki/Ancient_Greek"但是当我没有悬停链接时,这段html消失了.有没有办法(用BS4和python)用我正在抓取的源html提取这些信息?
编辑:我无法承担额外的网页调用,因为项目需要很长时间才能运行.如果无论如何都要改变我检索源的方式,这样我就可以获得有用的弹出信息.这个项目非常庞大,获取此弹出信息至关重要.
任何不需要完全重建项目的建议都非常感激 - 我正在使用urllib来获取源(带请求)和bs4来完成.
1> stx101..:
在您的问题中,您说"......无法承担额外的网页呼叫......"但这就是您的浏览器在幕后所做的事情.您正在查看的页面的html不包含您需要的内容.
为了证明这一点:
在浏览器中,打开一个Wikipedia页面,例如Greek.
打开"开发人员工具"窗口(Chrome中的Ctrl + Shift + i).
单击"网络"选项卡,确保红色按钮亮起,以便记录所有Web请求.
将鼠标悬停在页面中的链接上,例如Ancient Greek.
您将看到悬停在链接上的行为会触发对Ancient_Greek摘要页面的GET请求.
单击网络选项卡日志中的"Ancient_Greek"以显示请求的详细信息.
单击右侧的"响应"选项卡.
您应该看到包含名为"extract_html"的字段的JSON响应,其中包含您需要的内容: "The Ancient Greek language includes the forms...
因此,为了获得您需要的信息,每次遇到链接时
都必须向GET请求https://en.wikipedia.org/api/rest_v1/page/summary/something
2> 小智..:
弹出窗口和其他数据只能通过Javascript动态显示,你不能只使用urllib之类的东西来抓取数据.
您可以使用像splinter或selenium这样的浏览器控制器,它允许您自动悬停或单击事物以显示弹出窗口,然后提取其数据.获得弹出式HTML后,您可以使用BS4进行清理.
例如:
from splinter import Browser
browser = Browser()
browser.visit("http://google.com")
button = browser.find_by_name('button1')
button.click()