2011-05-26 61 views
0

我得到了一個有趣的小項目靈感來自今日的xkcd工具提示。 基本上,前提是對於任何維基百科文章,如果您一次又一次地遵循第一個鏈接(不在括號內或斜體內),最終您將看到哲學文章。網絡爬蟲類型程序 - 維基度分離

我正在嘗試編寫一個基本上隨機選擇一個維基百科頁面的程序(可能使用http://en.wikipedia.org/wiki/Special:Random網址),然後確定頁面來自哲學的「深度」。

我用C語言(我最熟悉的語言)打開了一個程序,爲了讓計劃順利並迅速實現,除了兩個「次要」(又名重要位)問題之外,我知道如何去做大部分工作:

char *grab_first_link(page, int n){ 
    //return url of 1st link not in italics or inside parentheses 
} 

void get_random_page{ 
    //go to http://en.wikipedia.org/wiki/Special:Random 
    //wait 2 seconds 
    //return the URL generated by the random page 
} 

所以基本上我正在尋找一個圖書館,可以幫助簡單的HTML頁面。以及如何根據上述規則獲得正確鏈接的一些提示。

(還 - 我肯定有一百萬+ 1的方式來更有效地做到這一點/容易,我只是好奇,如果我能得到這一切/大都用C完成)

感謝您的幫助,提示,鏈接或點在正確的方向。

+0

感謝編輯我永遠無法得到的代碼標記工作... – tomatosource 2011-05-27 01:46:50

回答

1
  1. 找到一個HTML解析器庫(libxml2可以完成這個工作)並閱讀它的手冊。 XPath可能會成爲你的朋友。
  2. 查找HTTP客戶端庫(並閱讀其說明書),然後看1
+0

對於任何人,顛簸到這一點,我最後使用libcurl和幾個簡單的獲取,並截斷原始的html給我下一個鏈接。 – tomatosource 2011-07-13 14:11:31

1

我對任何在維基百科上工作的程序的建議:不要使用HTML;相反,解析SQL dump,特別是鏈接表。在我的Wikiassoc程序中有一個link table parser(在C++中,不是C)。