2015-05-29 168 views
2

我正在製作一個Python網絡爬蟲程序來播放The Wiki game獲取維基百科頁面上的所有鏈接

如果你不熟悉這個遊戲:

  1. 開始從維基百科
  2. 一些文章
  3. 選擇一個目標文章
  4. 嘗試只通過點擊維基去從一開始就文章的目的文章/鏈接

我的過程中這樣做是:

  1. 以啓動文章和目標的文章作爲輸入
  2. 獲取鏈接到目標物品
  3. 瓶坯的鏈接breadth-first search發現避免已經訪問過的網頁從一開始的文章
  4. 開始的文章列表
  5. 檢查目標文章是否在當前頁面上:如果是,則返回path_crawler_took+goal_article
  6. 檢查是否有任何鏈接到目標的文章位於當前頁面上。如果其中之一是,返回path_crawler_took+intermediate_article+goal

我有一個問題,程序將返回一個路徑,但路徑不會真正鏈接到目標。

def get_all_links(source): 
    source = source[:source.find('Edit section: References')] 
    source = source[:source.find('id="See_also"')] 
    links=findall('\/wiki\/[^\(?:/|"|\#)]+',source) 
    return list(set(['http://en.wikipedia.org'+link for link in links if is_good(link) and link])) 

links_to_goal = get_all_links(goal) 

我意識到,我被刮的所有環節的斷目標頁面的獲取鏈接的目標,但維基/鏈接是單向的:只是因爲我們的目標鏈接指向的網頁並不意味着頁面鏈接到目標。

如何獲得鏈接到目標的文章列表?

+0

退房維基百科的反向鏈接工具http://en.wikipedia.org/wiki/Special:WhatLinksHere/Backlink –

回答

5

維基百科內置了一個工具,可以完全描述您所描述的WhatLinksHere/Backlink

您可以在每個維基百科頁面上看到此工具。 Example

您可以簡單地刪除目標背頁頁面上的所有鏈接。

'http://en.wikipedia.org/w/index.php?title=Special%3AWhatLinksHere&limit='500'&target='+goal+'&namespace=0' 
                          ^^^^ 
                          Article you are trying to reach here 

Wiki-help page for WhatLinksHere

相關問題