我需要查询维基百科只是为了一个非常特殊的目的,即获取给定网址的文本.更准确一点:
我有大约14.000个英文语料库的维基百科网址,我需要获取文本,或至少引入每个网址.我的进一步处理将在python中,因此这将是首选语言.
我正在寻找具有最佳性能的方法,并制定了4种不同的方法:
sql
使用python 查询我应该使用哪种方法,即哪种方法具有最佳性能并且以某种方式标准化?
一些想法:
我有大约14.000个英文语料库的维基百科网址,我需要获取文本,或至少引入每个网址.
1 - 通过python直接获取xml转储和解析
英语维基百科目前有4,140,640篇文章.您对14,000篇文章感兴趣,或者约占总数的百分之三十.这听起来太稀疏,不允许倾倒所有文章是最好的方法.
2 - 获取xml,设置数据库并使用python查询sql
您是否期望您感兴趣的一组文章能够成长或改变?如果您需要快速响应文章集中的更改,则本地数据库可能很有用.但你必须保持最新.如果速度足够快,使用API获取实时数据会更简单.
4 - 只是抓取这些维基百科页面(这可能是一种偷偷摸摸的,也很烦人,因为它的HTML和没有纯文本)
如果你可以从API获得你需要的东西,那将比刮掉维基百科网站更好.
3 - 使用维基百科api并通过python直接查询
根据你感兴趣的文章比例很低,0.338%,这可能是最好的方法.
请务必查看MediaWiki API文档和API参考.还有python-wikitools模块.
我需要得到文本,或者至少是介绍
如果你真的只需要介绍,这将节省大量的流量,并且真正使得使用API成为目前为止的最佳选择.
有多种方法可以检索介绍,这是一个好方法:
如果您一次要处理的请求很多,则可以将这些请求分组为最多20篇文章:
通过这种方式,您可以在700次往返中检索您的14,000篇文章介绍.
注意: API参考 exlimit
文档说明:
不允许超过20个(机器人20个)
另请注意: 有关礼仪和使用限制的API文档部分说:
如果您按顺序而不是并行地发出请求(即等待一个请求在发送新请求之前完成,这样您就不会同时发出多个请求),那么您一定应该没问题.还可以尝试将内容组合到一个请求中(例如,在titles参数中使用多个标题,而不是为每个标题发出新请求.
维基百科不断更新.如果您需要刷新数据,则可以跟踪修订ID和时间戳,以便识别哪些本地文章已过时.您可以使用(例如)检索修订信息(以及介绍,此处包含多篇文章):
归档时间: |
|
查看次数: |
909 次 |
最近记录: |