自动解析消歧页面
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 解析,因为速度对我的应用程序至关重要。
可能的解决方案(我需要帮助执行)
我可以设想几个解决这个问题的方法:
- 一种在 MediaWiki API 中自动跟随消歧页面的第一个 link 的方法
- Mediawiki API 中的一种方法,允许它根据条件(如存在消歧模板)return 不同数量的 HTML 内容
- 一种显着提高
bs4
速度的方法,这样即使我最终不得不解析整个页面也没关系 HTML
正如 Tgr 和大家所说,不,这样的功能不存在,因为它没有意义。消歧页面中的第一个 link 没有任何特殊的状态或含义。
至于现有的API,见https://www.mediawiki.org/wiki/Extension:Disambiguator#API_usage
顺便说一句,您 link 所学的 "bot policy" 并不真正适用于 crawlers/scraper;唯一相关的 policy/guideline 是 User-Agent policy.
问题
我正在使用维基百科 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 解析,因为速度对我的应用程序至关重要。
可能的解决方案(我需要帮助执行)
我可以设想几个解决这个问题的方法:
- 一种在 MediaWiki API 中自动跟随消歧页面的第一个 link 的方法
- Mediawiki API 中的一种方法,允许它根据条件(如存在消歧模板)return 不同数量的 HTML 内容
- 一种显着提高
bs4
速度的方法,这样即使我最终不得不解析整个页面也没关系 HTML
正如 Tgr 和大家所说,不,这样的功能不存在,因为它没有意义。消歧页面中的第一个 link 没有任何特殊的状态或含义。
至于现有的API,见https://www.mediawiki.org/wiki/Extension:Disambiguator#API_usage
顺便说一句,您 link 所学的 "bot policy" 并不真正适用于 crawlers/scraper;唯一相关的 policy/guideline 是 User-Agent policy.