【问题标题】:download articles from wikipedia using special export使用特殊导出从维基百科下载文章
【发布时间】:2026-01-08 11:50:01
【问题描述】:

我希望能够从 http://en.wikipedia.org/wiki/Special:Export 下载数千篇文章的完整历史记录,并且我正在寻找一种程序化的方法来自动化它。我想将结果保存为 XML。

这是我的Wikipedia query。我在 Python 中开始了以下操作,但没有得到任何有用的结果。

#!/usr/bin/python

import urllib
import codecs

f =  codecs.open('workfile.xml', 'w',"utf-8" )

class AppURLopener(urllib.FancyURLopener):
    version = "Mozilla/5.0 (Windows; U; Windows NT 5.1; it; rv:1.8.1.11) Gecko/20071127 Firefox/2.0.0.11"
urllib._urlopener = AppURLopener()

query = "http://en.wikipedia.org/w/index.php?title=Special:Export&action=submit"
data = { 'catname':'English-language_Indian_films','addcat':'', 'wpDownload':1 }
data = urllib.urlencode(data)
f = urllib.urlopen(query, data)
s = f.read()
print (s)

【问题讨论】:

  • 为什么结果没有用?你期望得到什么?
  • 请不要使用不正确的用户代理,除非完全必要。*应该与任何非空用户代理一起使用。
  • @svick:这不是完全正确的——一些用户代理字符串被列入黑名单。令人讨厌的是,这包括例如默认的 libwww-perl 用户代理字符串;如果 Python urllib 的默认 UA 字符串也在列表中,我不会感到惊讶。
  • @IlmariKaronen,是的,你是对的。但是您自己提供的用于识别您的应用的任何用户代理都应该没问题。
  • @ekhumoro 我想下载 XML 文件。

标签: python xml wikipedia wikimedia


【解决方案1】:

老实说,我建议使用 Mechanize 来获取页面,然后使用 lxml 或其他 xml 解析器来获取您想要的信息。通常我使用 firefox 用户代理,因为许多程序用户代理被阻止。请注意,使用 Mechanize,您实际上可以填写表格并“单击”输入,然后“单击”导出。

【讨论】: