获得大量(但不是全部)维基百科页面

时间:2010-01-03 13:47:00

标签: python algorithm wikipedia

对于我的NLP项目,我想从维基百科随机下载大量页面(比如10000)。在没有下载整个XML转储的情况下,这是我能想到的:

  1. 打开维基百科页面
  2. 以广度优先搜索方式解析链接的HTML并打开每个页面
  3. 在2
  4. 中获得的页面上递归打开链接

    在步骤2和3中,如果我达到了我想要的页数,我将退出。

    你会怎么做?请提出您能想到的更好的想法。

    答案:这是我的Python代码:

    # Get 10000 random pages from Wikipedia.
    import urllib2
    import os
    import shutil
    #Make the directory to store the HTML pages.
    print "Deleting the old randompages directory"
    shutil.rmtree('randompages')
    
    print "Created the directory for storing the pages"
    os.mkdir('randompages')
    
    num_page = raw_input('Number of pages to retrieve:: ')
    
    for i in range(0, int(num_page)):
        opener = urllib2.build_opener()
        opener.addheaders = [('User-agent', 'Mozilla/5.0')]
        infile = opener.open('http://en.wikipedia.org/wiki/Special:Random')
    
        page = infile.read()
    
        # Write it to a file.
        # TODO: Strip HTML from page
        f= open('randompages/file'+str(i)+'.html','w')
        f.write(page)
        f.close()
    
        print "Retrieved and saved page",i+1
    

6 个答案:

答案 0 :(得分:23)

for i = 1 to 10000
    get "http://en.wikipedia.org/wiki/Special:Random"

答案 1 :(得分:20)

维基百科有一个API。使用此API,您可以获取给定命名空间中的任何随机文章:

http://en.wikipedia.org/w/api.php?action=query&list=random&rnnamespace=0&rnlimit=5

并且您调用的每篇文章也会获得维基文本:

http://en.wikipedia.org/w/api.php?action=query&prop=revisions&titles=Main%20Page&rvprop=content

答案 2 :(得分:1)

我会采用相反的方式 - 从XML转储开始,然后扔掉你不想要的东西。

在您的情况下,如果您希望进行自然语言处理,我会假设您对具有完整句子的页面感兴趣,而不是对链接列表感兴趣。如果你以你描述的方式抓取链接,你将会遇到许多链接页面。

为什么要避免使用XML,当您获得使用XML解析工具的好处时,会使您的选择过程更容易?

答案 3 :(得分:0)

您可以绕过大部分要求:

http://cs.fit.edu/~mmahoney/compression/enwik8.zip

是一个包含100 MB维基百科的ZIP文件,已经为您提取。链接文件大小约为16 MB。

答案 4 :(得分:0)

查看DBpedia project

有少量可下载的块,至少包含一些文章URL。解析10000后,您可以仔细批量下载它们......

答案 5 :(得分:0)

我知道它已经很久了,但对于那些仍然在寻找一种有效的方式来抓取和下载大量维基百科页面(或整个维基百科)而不违反robot.txt文件的人来说,' Webb&#39 ;库很有用。这是链接:

Webb Library for Web Crawling and Scrapping