自动解析消歧页面

Automatically resolving disambiguation pages

问题

我正在使用维基百科 API 获取我解析的页面 HTML。我使用 this one 之类的查询来获取页面第一部分的 HTML。

MediaWiki API 提供了一个方便的参数,redirects,它将导致 API 自动跟随重定向其他页面的页面。例如,如果我用 https://en.wikipedia.org/w/api.php?page=Cats&redirects 搜索 'Cats',我将看到 Cat 的结果,因为 Cats 重定向到 Cat

我想要 disambiguation pages such as this, by which if I arrive at a disambiguation page, I am automatically redirected to the first link. For example, if I make a request to a page like Mercury, I'd automatically be redirected to Mercury (element) 的类似功能,因为它是页面中列出的第一个 link。

Python HTML 解析器 BeautifulSoup 在大型文档上相当慢。通过只请求文章的第一部分(这就是我所需要的),使用 section=0,我可以快速解析它。这对大多数文章来说都是完美的。但是对于消歧页面,第一部分 将任何 link 包含到特定页面,这使其成为一个糟糕的解决方案。但是如果我请求比第一节多 ,HTML 加载就会变慢,这对大多数文章来说是不必要的。有关消歧页面的示例,请参阅 this query,其中 link 未包含在第一部分中。

到目前为止我有什么

截至目前,我已经能够检测何时到达消歧页面。我使用像

这样的代码
bs4.BeautifulSoup(page_html).find("p", recursive=false).get_text().endswith(("refer to:", "refers to:"))

我也花了一段时间尝试编写自动跟在 link 之后的代码,然后才意识到 link 不包含在

我的约束

我希望将请求的数量保持在最低限度。我还需要尽可能小 HTML 解析,因为速度对我的应用程序至关重要。

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

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

  1. 一种在 MediaWiki API 中自动跟随消歧页面的第一个 link 的方法
  2. Mediawiki API 中的一种方法,允许它根据条件(如存在消歧模板)return 不同数量的 HTML 内容
  3. 一种显着提高 bs4 速度的方法,这样即使我最终不得不解析整个页面也没关系 HTML

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

至于现有的API,见https://www.mediawiki.org/wiki/Extension:Disambiguator#API_usage

顺便说一句,您 link 所学的 "bot policy" 并不真正适用于 crawlers/scraper;唯一相关的 policy/guideline 是 User-Agent policy.