urllib2不读取整个页面

时间:2012-10-24 15:17:34

标签: python http html-parsing urllib2

我将解析网站的一部分代码不起作用。

我可以将问题追溯到我的urllib2.urlopen对象的.read函数。

page = urllib2.urlopen('http://magiccards.info/us/en.html')
data = page.read()

直到昨天,这个工作正常;但现在数据的长度总是69496而不是122989,但是当我打开较小的页面时,我的代码工作正常。

我在Ubuntu,Linux Mint和Windows 7上测试了这一点。所有都有相同的行为。

我假设网络服务器上发生了一些变化;但是当我使用网络浏览器时,页面已完成。我试图通过wireshark诊断问题,但页面收到完整。

有人知道为什么会发生这种情况或我可以尝试确定问题吗?

2 个答案:

答案 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)