9

我已经使用Pywikibot构建了一些报告工具。随着事情的发展,现在完成报告最多需要 2 个小时,所以我希望加快速度。主要观点:

  • 禁用限制,脚本是只读的,所以page.get(throttle=False)处理这个
  • 缓存
  • 直接访问数据库

不幸的是,我找不到太多关于缓存和数据库访问的文档。唯一的方法似乎是深入代码,而且,关于数据库访问的信息有限user-config.py。如果有的话,我在哪里可以找到关于 pywikibot 缓存和直接数据库访问的好文档?

而且,还有其他方法可以加快速度吗?

4

6 回答 6

5

使用PreloadingGenerator以便批量加载页面。或者MySQLPageGenerator,如果您使用直接数据库访问。

请参阅此处的示例。

于 2015-09-12T20:38:40.093 回答
1

我在命令中使用“-pt:1”选项每秒进行一次编辑。

我目前正在运行命令

python pwb.py category add -pt:1 -file:WX350.txt -to:"Taken with Sony DSC-WX350"

https://www.mediawiki.org/wiki/Manual:Pywikibot/Global_Options

于 2017-11-24T08:13:51.110 回答
1
  • 禁用节流,脚本是只读的,所以 page.get(throttle=False) 处理这个

自 Pywikibot 2.0(以前称为 rewrite)以来,不支持 Page.get() 的“throttle”参数,并在 5.0.0 中被删除。Pywikibot 2.0+ 默认没有激活获取限制。减少 putthrottle 仅用于将页面放入 wiki,可能会受到当地政策的限制。切勿触摸与服务器相关的 maxlag 参数。

如果您使用多个站点,则第一次运行需要很长时间,直到所有站点对象都被缓存。PreloadingGenerator 可用于页面内容的批量加载,但如果仅需要元数据,则会降低速度。总之,加速你的脚本取决于你的实现和你的需要。

于 2020-11-03T15:46:50.997 回答
1

看起来pagegenerators确实是加速事情的好方法。最好的文档直接在源代码中

即使在那里,也不清楚将 MySQL 连接详细信息放在哪里。(希望会更新这个。)

于 2015-10-01T15:14:44.860 回答
0

正如其他答案已经指出的那样,使用PreloadingGeneratorfrom是加速某些需要从在线 wiki 中大量阅读的程序的最简单方法。pagegenerators

替代方法是:

  • 下载 wiki 的转储文件并在本地阅读。维基媒体项目提供大约每周更新一次的转储。
  • 在Wikimedia Labs上创建一个帐户,然后从那里享受与 Wikipedias 的更快连接和更新的转储。

如果目标 wiki 有针对它的政策,修改throttle可能会使您面临被阻止的危险——我担心 Wikipedia 有这样的政策。

于 2017-03-05T15:16:03.440 回答
0

您可以在此站点 http://dumps.wikimedia.org的转储文件中预先下载所有数据 然后您可以使用两次传递 - 第一次从本地转储读取数据,然后第二次传递仅读取远程您在本地转储中发现问题的页面。

例子:

dump_file = hewiktionary-latest-pages-articles.xml.bz2

all_wiktionary = XmlDump(dump_file).parse()
gen = (pywikibot.Page(site, p.title) for p in all_wiktionary if report_problem(p))
gen = pagegenerators.PreloadingGenerator(gen)
for page in gen:
    report_problem(page)
于 2019-03-07T20:09:18.380 回答