2014-03-12 39 views
1

我試圖從維基百科頁面中提取內部鏈接。這是我正在使用的查詢如何從維基百科頁面的最新版本獲取內部鏈接?

/w/api.php?action=query&prop=links&format=xml&plnamespace=0&pllimit=max&titles=pageTitle 

但是,結果並不反映維基頁面上的內容。以一個隨機文章here爲例。此頁面上只有十幾個鏈接。但是,當我作出查詢時,

/w/api.php?action=query&prop=links&format=xml&plnamespace=0&pllimit=max&titles=Von_Mises%E2%80%93Fisher_distribution 

我找回了187個鏈接。我猜這個API可能有一個包含所有修改的頁面的所有鏈接的數據庫。是這樣嗎?我如何才能從最後一次修訂中獲得鏈接?

+2

難道是你忘了導航盒中的鏈接?從我可以看到API回覆的所有鏈接都在頁面中。你能舉一個不應該在那裏的鏈接的例子嗎? – leo

+0

+1。你說得對,利奧。不幸的是,這個API不允許我指定頁面的哪一部分從( – chepukha

回答

5

該數據庫包含當前版本文章中鏈接的正確列表。您從API獲得的所有鏈接實際上都在文章中。但是,其中大部分隱藏在底部的(兩次摺疊)導航框中(滾動到底部,單擊藍色條上的「顯示」,然後單擊現在看到的其他藍色條上的「顯示」)。

請注意,這些鏈接位於頁面上,但未在wiki文本中定義 - 它們來自{{ProbDistributions}}導航模板(以及模板反過來包含的模板)。

不幸的是,沒有好的方法只列出在頁面上直接/顯式定義的鏈接,因爲模板替換髮生在實際解析wiki語法之前。

+0

+1)中提取鏈接,我發現它使事情比我預期的更復雜,在這種情況下,我想最好的方法是解析wikitext。但是你知道任何可用的解析器,這對於這項工作很有用嗎?謝謝。 – chepukha

+0

不幸的是,MediaWiki語法非常複雜,並且調用將它變成HTML爲「解析器」的東西使用這個術語非常失敗。要重新實現「規範」解析器的確切行爲非常困難,我們得到的結論是Parsoid,但是有一堆「體面的」解析器應該足夠好,可以幫助您獲得鏈接。 :https://www.mediawiki.org/wiki/Alternative_parsers – brightbyte

+0

如果你想要的只是提取鏈接,你可以使用來自PyWikipedia框架或類似庫的代碼,也可以https://stackoverflow.com/questions/ 1968132 /如何對解析提取物-數據從-a-的mediawiki標記 - 上 - 文章 - 通過 - 蟒蛇 – brightbyte

相關問題