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

4 投票
3 回答
2893 浏览
提问于 2025-04-15 17:35

我有一个关于自然语言处理的项目,我想从维基百科随机下载大量页面(比如说,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

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"

撰写回答