获取大量(但不是全部)维基百科页面
我有一个关于自然语言处理的项目,我想从维基百科随机下载大量页面(比如说,10000个)。我不想下载整个XML文件,所以我想到的办法是:
- 打开一个维基百科页面
- 用广度优先搜索的方法解析这个页面的HTML,找到里面的链接,然后打开每个链接
- 对步骤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
3 个回答
1
我会反过来做——先从XML文件开始,然后把你不需要的部分扔掉。
在你的情况下,如果你想做自然语言处理,我想你是想要那些有完整句子的页面,而不是链接的列表。如果你按照你描述的方式去抓取链接,你会碰到很多只是链接的页面。
而且,为什么要避免使用XML呢?用XML解析工具可以让你选择内容的过程变得更简单,这样不是更好吗?
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
24
在编程中,有时候我们会遇到一些问题,特别是在使用某些工具或库的时候。这些问题可能会让我们感到困惑,尤其是当我们不太了解这些工具的工作原理时。比如,有人可能在使用一个特定的库时,发现它的某个功能没有按预期工作。这时候,查看相关的讨论或者问答平台,比如StackOverflow,就能帮助我们找到解决方案。
在这些讨论中,其他程序员可能会分享他们的经验,或者提供一些代码示例,帮助我们理解问题的根源。通过这些交流,我们不仅能找到解决当前问题的方法,还能学到一些新的知识,提升自己的编程能力。
总之,遇到问题时,不要害怕去寻求帮助,社区中的其他人可能会给你带来意想不到的启发。
for i = 1 to 10000
get "http://en.wikipedia.org/wiki/Special:Random"