我正在尝试使用Python 2.7进行一些分析,了解维基百科文章的内容如何随时间而变化。我只对页面内容感兴趣,并发现最简单的方法是使用Wikipedia package。我的代码成功加载了一篇文章,然后我可以使用article.content函数进行分析。
import Wikipdia
# pull in wikipedia article
name = 'George W. Bush'
article = wikipedia.page(name)
object = article.content
# Do analysis here
以下代码(我从另一个Stack Exchange问题得到)找到了我想要的所有修订历史记录。从这里我可以提取我需要的所有修订版ID。
site = wiki.Wiki("http://en.wikipedia.org/w/api.php")
names = ["Sherrod Brown","Maria Cantwell"]
allMembers = []
for name in labels:
params = {'action':'query',
'titles': name,
'prop':'revisions',
'rvprop':'ids|flags|timestamp|userid|user|size|comment|tags|minor',
'rvlimit':'10'
}
req = api.APIRequest(site, params)
res = req.query(querycontinue=False)
allMembers.append(res)
# Write to a file and load it into a dictionary
with open('wiki-leg.json', 'w') as outfile:
json.dump(allMembers, outfile, indent=2)
with open('wiki-leg.json') as data_file:
data = json.load(data_file)
从这里我不知道如何为修订获得相同的article.content()。我似乎无法用维基百科软件包做到这一点,并且使用urllib2并没有产生简单的文本解析结果。有没有办法获取维基百科文章的旧版本(修订版)的内容?
答案 0 :(得分:4)
我对维基百科库并不是很熟悉,但pywikibot对你想要做的事情似乎很容易。所以你需要来自同一页面的不同版本的文本,对吧?试试这个:
import pywikibot
site = pywikibot.Site(u"en", fam=u"wikipedia")
wpage = pywikibot.Page(site, u"Portugal")
wpHist = wpage.fullVersionHistory(total=5)
for i in wpHist:
print i[3]
在每次迭代中,您都将获得有关该修订的信息。
答案 1 :(得分:0)
要获取单个修订版ID的页面内容,即您已经拥有修订版ID并且只想要该页面而不是完整历史记录,您可以使用getOldVersion
:
import pywikibot
site = pywikibot.Site("en", "wikipedia")
page = pywikibot.Page(site, "George W. Bush")
revs = page.revisions(content=False, total = 10)
revs = list(revs)
# example
revs[9]['revid']
text = page.getOldVersion(oldid = revs[9]['revid'])
print(text)
某些上下文:获取包含数千次修改的页面的完整历史记录可能需要一些时间,而且对于我尝试执行的操作,我只需要一小部分修订。因此,在没有内容的情况下查询修订历史更快,识别我需要的修订ID,然后仅下载内容。