問題
我正在使用維基百科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
,我可以快速解析它。這對大多數文章來說都是完美的但是對於消歧頁面,第一部分並不包含而不是包含指向特定頁面的任何鏈接,使其成爲糟糕的解決方案。但是如果我要求更多比第一部分,HTML加載速度減慢,這對大多數文章是不必要的。請參閱this query以獲取消歧頁面的示例,其中鏈接不包含在第一部分中。
我至今
至於現在,我就得到了爲達到消除歧義頁面時檢測。我用這樣的代碼
bs4.BeautifulSoup(page_html).find("p", recursive=false).get_text().endswith(("refer to:", "refers to:"))
我也花了,而試圖編寫代碼自動執行一個鏈接,我才意識到,該鏈接不包含在
我的約束
我寧願以儘量減少請求的數量。我還需要解析爲儘可能少的HTML,因爲速度對於我的應用程序至關重要。
可能的解決方案(我需要幫助執行)
我可以設想幾種解決方案,這一問題:
- MediaWiki的API中的一種自動遵循消歧頁面第一個鏈接
- Mediawiki API中的一種方法,允許它根據條件返回不同數量的HTML內容(如存在消歧模板)
- 一種顯着提高速度的方法因此,如果我最終不得不解析整個頁面,這並不重要HTML
下載維基百科數據庫並在本地處理它不是更容易嗎? https://en.wikipedia.org/wiki/Wikipedia:Database_download – DainDwarf
我正在使用20GB的Web服務器,所以不需要:P –
是否有一個原因,您沒有使用[Pywikibot](https:// www。 mediawiki.org/wiki/Manual:Pywikibot)或至少是API調用?你可以在pywikibot中使用'page.isDisambig()'(不需要解析HTML),你也可以簡單地請求內部鏈接('action = query&prop = links')......幾乎沒有必要刮掉MediaWiki頁面的HTML內容... – Carpetsmoker