Pywikibot 使用MW 的 API 来获取修订版本。
API 不为修订提供更改的大小。
size
API 提供了参数选项,而不是大小更改rvprop
。使用它可以轻松计算尺寸变化。
不幸的是 pywikibot 不获取size
修订。
您可以为 pywikibot 团队提交错误报告。
可以直接使用PropertyGenerator
类来获得具有所需属性的修订:
from pywikibot import Site, Page
from pywikibot.data.api import PropertyGenerator
site = Site("en", "wikipedia")
revs = next(iter(PropertyGenerator('revisions', site=site, parameters={
'titles': 'Main Page',
'rvprop': 'timestamp|size',
})))['revisions']
print(len(revs))
for rev in revs[:5]:
print(rev)
上面的代码将打印:
4239
{'timestamp': '2020-07-23T12:44:21Z', 'size': 3500}
{'timestamp': '2020-07-23T12:43:46Z', 'size': 3499}
{'timestamp': '2020-07-23T12:43:31Z', 'size': 3500}
{'timestamp': '2020-06-30T07:05:28Z', 'size': 3499}
{'timestamp': '2020-06-22T13:37:29Z', 'size': 3501}
旧答案:如评论中所述,此方法不处理 API 延续,因此如果您需要页面的所有修订,则不建议使用。
import pywikibot
from pywikibot.data.api import Request
site = pywikibot.Site("en", "wikipedia")
r = Request(site, parameters={
'action': 'query',
'titles': 'Main Page',
'prop': 'revisions',
'rvprop': 'timestamp|size',
'rvlimit': 5,
}).submit()
pages = r['query']['pages']
for page_id, page_info in pages.items():
for rev in page_info['revisions']:
print(rev)
上面的代码将打印:
{'timestamp': '2020-07-23T12:44:21Z', 'size': 3500}
{'timestamp': '2020-07-23T12:43:46Z', 'size': 3499}
{'timestamp': '2020-07-23T12:43:31Z', 'size': 3500}
{'timestamp': '2020-06-30T07:05:28Z', 'size': 3499}
{'timestamp': '2020-06-22T13:37:29Z', 'size': 3501}