我将解析网站的一部分代码不起作用。
我可以将问题追溯到我的urllib2.urlopen对象的.read
函数。
page = urllib2.urlopen('http://magiccards.info/us/en.html')
data = page.read()
直到昨天,这个工作正常;但现在数据的长度总是69496而不是122989,但是当我打开较小的页面时,我的代码工作正常。
我在Ubuntu,Linux Mint和Windows 7上测试了这一点。所有都有相同的行为。
我假设网络服务器上发生了一些变化;但是当我使用网络浏览器时,页面已完成。我试图通过wireshark诊断问题,但页面收到完整。
有人知道为什么会发生这种情况或我可以尝试确定问题吗?
答案 0 :(得分:4)
除非您请求编码为gzip的内容,否则该页面似乎行为不端。试一试:
import urllib2
import zlib
request = urllib2.Request('http://magiccards.info/us/en.html')
request.add_header('Accept-Encoding', 'gzip')
response = urllib2.urlopen(request)
data = zlib.decompress(response.read(), 16 + zlib.MAX_WBITS)
正如Nathan建议的那样,你也可以使用伟大的Requests库,它默认接受gzip。
import requests
data = requests.get('http://magiccards.info/us/en.html').text
答案 1 :(得分:0)
是的,服务器正在关闭连接,您需要发送keep-alive
。 urllib2没有那个功能(:-()。你曾经使用过urlgrabber有一个HTTPHandler和urllib2 opener一起工作。但不幸的是,我发现它也没有工作。目前,你可以是其他图书馆,如其他答案或httplib2中所示的请求。
import httplib2
h = httplib2.Http(".cache")
resp, content = h.request("http://magiccards.info/us/en.html", "GET")
print len(content)