2012-04-06 56 views
2

我需要設計一個程序,在整個維基百科文章集合中找到一定的四個或五個單詞短語(是的,我知道這是很多頁面,我不需要回答調用我是一個白癡做這個)。在python中搜索所有維基百科頁面的短語

我沒有編程太多這樣的東西之前,所以有,我將不勝感激一些幫助兩個問題:

  • 首先,我將如何能夠讓程序通過抓取所有的頁面(即不硬編碼每一百萬頁)我已經將所有文章下載到我的硬盤上,但我不知道如何告訴程序遍歷文件夾中的每一個文件) 編輯 - 我有我的硬盤上的所有wikipedia文章

  • 頁面的快照中有圖片和表格。我將如何只提取文章的正文?

您對任何一個問題的幫助都非常感謝!

+2

谷歌搜索:'site:wikipedia.org word1 word2 word3 word4'。維基百科不會喜歡你抓取整個網站,我懷疑你是否希望在月底的帶寬賬單。 – 2012-04-06 04:31:07

+0

你最好讓谷歌搜索你的網頁,然後搜索結果。只需驗證該網頁是否爲維基百科網址,並且該網頁中包含該詞組即可。 – aaronasterling 2012-04-06 04:31:52

回答

6

您可以下載official datadump,而不是手動抓取頁面,該頁面較慢且可以被阻止。這些不包含圖像,所以第二個問題也解決了。

編輯:我看到你有你的電腦上的所有文章,所以這個答案可能沒有多大幫助。

0

要點1:Python有一個模塊,用於遞歸迭代每個文件或目錄的任務,路徑爲os.walk

第2點:你似乎在這裏問的是如何區分圖像和文本文件中的文件。在magic模塊,可在奶酪店,提供了Python綁定同一個名字(通常援引爲file(1)

0

的標準Unix工具你問:

我已經下載的所有文章到我的硬盤開車,但我不肯定 我怎麼能告訴程序通過每一個在 文件夾

假設所有文件都在目錄樹結構,你可以使用os.walk迭代( link使用像Python文檔和示例)訪問所有文件,然後搜索每個文件的短語(S):

for line in open("filename"): 
    if "search_string" in line: 
     print line 

當然,這個解決方案將不會在的「巨蟒逆足的封面「雜誌,但我是Python的新手,所以我會拉動n00b卡。使用Python的預先烘焙的模塊可能會有更好的方式在文件中進行grep。

+0

如果沒有正則表達式,可以嘗試像'print'\ n'.join(如果在行中包含「search_string」)打開(「filename」)行, – aaronasterling 2012-04-06 04:50:16

2

頁面的快照中有圖片和表格。 我將如何提取文章的正文?

如果您在表格中找到短語可以,您可以嘗試直接使用regular expressions,但更好的選擇是使用解析器並刪除所有標記。你可以使用Beautiful Soup做到這一點(你需要LXML太):

from bs4 import BeautifulSoup 
# produces an iterable generator that returns the text of each tag in turn 
gen = BeautifulSoup(markup_from_file, 'xml').stripped_strings 
list_of_strings = [x for x in gen] # list comprehension generates list 
' '.join(list_of_strings) 

BeautifulSoup產生Unicode文本,因此,如果您需要更改的編碼,你可以這樣做:

list_of_strings = map(lambda x: x.encode('utf-8'),list_of_strings) 

另外,美麗的湯可以幫助你更好地導航和選擇每個文件。如果你知道數據轉儲的編碼,這肯定會幫助它更快。作者還說,它在Python 3上運行速度更快。