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

4 python algorithm wikipedia

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

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

在第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
Run Code Online (Sandbox Code Playgroud)

Tom*_*ier 23

for i = 1 to 10000
    get "http://en.wikipedia.org/wiki/Special:Random"
Run Code Online (Sandbox Code Playgroud)

  • 这可以提供重复. (3认同)
  • 您可以忽略已下载的页面. (2认同)
  • 虽然这可以给出重复,但对我来说可能并不重要.+1为快速简单的想法. (2认同)

Pie*_*rre 20

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

http://en.wikipedia.org/w/api.php?action=query&list=random&rnnamespace=0&rnlimit=5
Run Code Online (Sandbox Code Playgroud)

对于您调用的每篇文章,也会获得维基文本:

http://en.wikipedia.org/w/api.php?action=query&prop=revisions&titles=Main%20Page&rvprop=content
Run Code Online (Sandbox Code Playgroud)