我正在使用Wikipedia API来获取我解析的页面HTML。我使用this one之类的查询来获取页面第一部分的HTML。
MediaWiki API提供了一个方便的参数redirects
,这将使API自动跟随重定向其他页面的页面。例如,如果我使用https://en.wikipedia.org/w/api.php?page=Cats&redirects
搜索“猫”,我会看到Cat
的结果,因为Cats
会重定向到Cat
。
我想要disambiguation pages的类似功能,例如this,如果我到达消歧页面,我会自动重定向到第一个链接。例如,如果我向Mercury这样的网页发出请求,我会自动重定向到Mercury (element),因为它是页面中列出的第一个链接。
Python HTML解析器BeautifulSoup
在大型文档上相当慢。通过仅使用section=0
请求第一部分文章(这是我需要的全部内容),我可以快速解析它。这对大多数文章来说都很完美。但对于消除歧义的页面,第一部分不包含指向特定页面的任何链接,使其成为一个糟糕的解决方案。但是,如果我请求 more 而不是第一部分,则HTML加载速度变慢,这对于大多数文章来说都是不必要的。有关消除歧义页面的示例,请参阅this query,其中第一部分中不包含链接。
截至目前,我已经检测到何时到达消除歧义页面。我使用像
这样的代码bs4.BeautifulSoup(page_html).find("p", recursive=false).get_text().endswith(("refer to:", "refers to:"))
在我意识到链接未包含在
之前,我还花了一段时间尝试编写自动跟踪链接的代码我希望将请求数量保持在最低限度。我还需要解析为尽可能少的HTML ,因为速度对我的应用程序至关重要。
我可以设想几个解决这个问题的方法:
bs4
速度的方法,这样如果我最终必须解析整个页面HTML无关紧要答案 0 :(得分:1)
正如Tgr和所有人所说,不,这样的功能不存在,因为它没有意义。消歧页面中的第一个链接没有任何特殊的状态或含义。
对于现有API,请参阅https://www.mediawiki.org/wiki/Extension:Disambiguator#API_usage
顺便说一句,您链接的“机器人政策”并不真正适用于抓取工具/刮刀;唯一相关的政策/指南是User-Agent policy。