自动解决消除歧义的页面

时间:2016-03-25 16:00:47

标签: python beautifulsoup wikipedia wikipedia-api mediawiki-api

问题

我正在使用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 ,因为速度对我的应用程序至关重要。

可能的解决方案(我需要帮助执行)

我可以设想几个解决这个问题的方法:

  1. MediaWiki API中的一种自动跟踪消歧页面第一个链接的方法
  2. Mediawiki API中的一种方法,允许它根据条件返回不同数量的HTML内容(如存在消歧模板)
  3. 一种显着提高bs4速度的方法,这样如果我最终必须解析整个页面HTML无关紧要

1 个答案:

答案 0 :(得分:1)

正如Tgr和所有人所说,不,这样的功能不存在,因为它没有意义。消歧页面中的第一个链接没有任何特殊的状态或含义。

对于现有API,请参阅https://www.mediawiki.org/wiki/Extension:Disambiguator#API_usage

顺便说一句,您链接的“机器人政策”并不真正适用于抓取工具/刮刀;唯一相关的政策/指南是User-Agent policy