根据@Jens Timmerman在这篇文章中的回答:Extract the first paragraph from a Wikipedia article (Python)
我这样做了:import urllib2
def getPage(url):
opener = urllib2.build_opener()
opener.addheaders = [('User-agent', 'Mozilla/5.0')] #wikipedia needs this
resource = opener.open("http://en.wikipedia.org/wiki/" + url)
data = resource.read()
resource.close()
return data
print getPage('Steve_Jobs')
从技术上讲它应该正常运行并给我页面的来源。但这就是我得到的:
任何帮助将不胜感激..
答案 0 :(得分:2)
用wget
和curl
核对后,我发现这不是Python特有的问题 - 他们也有“奇怪”的字符;快速检查file
告诉我响应只是gzip压缩,所以维基百科默认只发送gzip压缩数据,而不检查客户端是否真的说要在请求中支持它。
幸运的是,Python能够解压缩gzip压缩数据:将代码与this answer集成:
import urllib2
from StringIO import StringIO
import gzip
def getPage(url):
opener = urllib2.build_opener()
opener.addheaders = [('User-agent', 'MyTestScript/1.0 (contact at myscript@mysite.com)'), ('Accept-encoding', 'gzip')]
resource = opener.open("http://en.wikipedia.org/wiki/" + url)
if resource.info().get('Content-Encoding') == 'gzip':
buf = StringIO( resource.read())
f = gzip.GzipFile(fileobj=buf)
return f.read()
else:
return resource.read()
print getPage('Steve_Jobs')
在我的机器上工作正常。
然而,正如评论中已经指出的那样,如果你想以编程方式使用他们的API来访问维基百科内容,你应该避免“野蛮爬行”。