3

嗨,我正在尝试构建一个简单的维基百科报废工具,它可以让我分析文本并构建一个使用 python 的人生活中的事件时间线。我已经在网上搜索可能的方法来做到这一点,直到现在我已经能够使用 BeautifulSoup 和 urllib2 检索数据。到目前为止的代码看起来像这样:

from bs4 import  BeautifulSoup
import urllib2
import re
import nltk
import json


#get source code of page (function used later)
def fetchsource(url):
    source = urllib2.urlopen(url).read()
    return source

if __name__=='__main__':
    #url = "http://en.wikipedia.org/w/index.php?action=raw&title=Tom_Cruise" #works
    url="http://en.wikipedia.org/w/api.php?action=query&prop=revisions&rvprop=content&format=xml&&titles=Tom_Cruise" #works
    print url
    source = fetchsource(url)
    soup = BeautifulSoup(source)
    print soup.prettify()

现在虽然我可以使用它,但是我得到的输出解析起来有点棘手,我只是想问一下是否有更好的方法或者更易于管理的语法来检索数据。请评论。

4

3 回答 3

6

您还可以使用pywikipediabot获取文章 wikitext。例如,要获取 Tom Cruise 的 wikitext,就像在您的示例中一样,您可以使用:

import wikipedia

page = wikipedia.Page(wikipedia.getSite(), 'Tom_Cruise')

pageText = page.get()

print pageText

通过这种方式,您可以尝试从模板中获取数据,如果需要,还有一些 wikitext 解析器。

于 2012-11-28T23:37:55.707 回答
2

从 html 页面中提取数据从来都不是一件有趣的事情,但在我看来, http: //scrapy.org/ 让它变得更容易了。您可以使用 XPath 来提取数据,功能非常强大。如果您想以这种方式检索数据,我肯定会使用scrapy。

您还应该检查是否有其他选项来获取数据。据我所知,可以下载维基百科的数据转储。对于您的用例来说,这可能有点过头了,但可能存在其他 API。

于 2012-10-14T22:07:06.597 回答
2

DBpedia 允许通过查询检索 Wikipedia 中的结构化信息。 http://dbpedia.org/

于 2012-10-21T13:41:38.163 回答