2013-01-24 89 views
0

我想通過以下http://www.mediawiki.org/wiki/Manual:Parameters_to_Special:Export從土耳其維基百科頁面導出一個類別。這是我正在使用的代碼;用Python導出維基百科

# -*- coding: utf-8 -*- 
import requests 
from BeautifulSoup import BeautifulStoneSoup 
from sys import version 


link = "http://tr.wikipedia.org/w/index.php?title=%C3%96zel:D%C4%B1%C5%9FaAktar&action=submit" 

def get(pages=[], category = False, curonly=True): 
    params = {} 
    if pages: 
     params["pages"] = "\n".join(pages) 
    if category: 
     params["addcat"] = 1 
     params["category"] = category 

    if curonly: 
     params["curonly"] = 1 

    headers = {"User-Agent":"Wiki Downloader -- Python %s, contact: Yaşar Arabacı: [email protected]" % version} 
    r = requests.post(link, headers=headers, data=params) 
    return r.text 

print get(category="Matematik") 

由於我試圖從土耳其維基百科獲取數據,我使用了它的url。其他事情應該是自我解釋。我正在獲取可用於導出數據而不是實際xml的表單頁面。任何人都可以看到我在這裏做錯了什麼?我也嘗試了一個請求。

+0

什麼問題?你有什麼錯誤嗎? – svick

+0

@svick我得到的頁面,您可以提交表單獲取數據,而不是獲取實際的數據。 – yasar

回答

0

對不起,我原來的答案是可怕的缺陷。我誤解了原意。

我做了一些更多的實驗,因爲我很好奇。看起來你上面的代碼不一定是不正確的,事實上,特別出口文件是誤導性的。該文檔指出,使用catnameaddcat會將類別添加到輸出中,但它僅在html表單內列出指定的catname內的頁面和類別。似乎維基百科實際上要求明確指定您希望下載的頁面。當然,那裏的文件並不一定非常透徹。我建議你解析類別頁面的頁面,然後用腳本明確下載這些頁面。在效率方面,我確實看到了這種方法的一個問題。由於維基百科數據的性質,您將獲得很多頁面,這些頁面只是其他頁面的類別頁面。

另外,使用可供下載的維基百科的實際語料庫可能會更快。

祝你好運!

+0

但是,這不會返回類別'Matematik'中的頁面,只是單個頁面'Matematik'。 – svick

1

沒有名爲category的參數,類別名稱應該在參數catname中。

但是特殊:出口不是爲機器人而構建的,它是爲人類構建的。因此,如果您正確使用catname,它將再次返回表單,這次填入類別中的頁面。然後,您應該再次單擊「提交」,這將返回您想要的XML。

我認爲在代碼中這樣做會太複雜。如果您改用API,會更容易。有一些Python庫可以幫助你:Pywikipediabotwikitools