我试图从一个网站获取一些数据.然而,它返回我incomplete read
.我试图获取的数据是一个巨大的嵌套链接集.我做了一些在线研究,发现这可能是由于服务器错误(一个分块传输编码完成之前达到预期的大小).我还发现了一个解决方案,上面这个link
然而,我不确定如何在我的情况下使用它。
br = mechanize.Browser()
br.addheaders = [('User-agent', 'Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1;Trident/5.0)')]
urls = "http://shop.o2.co.uk/mobile_phones/Pay_Monthly/smartphone/all_brands"
page = urllib2.urlopen(urls).read()
soup = BeautifulSoup(page)
links = soup.findAll('img',url=True)
for tag in links:
name = tag['alt']
tag['url'] = urlparse.urljoin(urls, tag['url'])
r = br.open(tag['url'])
page_child = br.response().read()
soup_child = BeautifulSoup(page_child)
contracts = [tag_c['value']for tag_c in soup_child.findAll('input', {"name": "tariff-duration"})]
data_usage = [tag_c['value']for tag_c in soup_child.findAll('input', {"name": "allowance"})]
print contracts
print data_usage
字符串
请帮我拿一下,谢谢
9条答案
按热度按时间tct7dpnv1#
您在问题中包含的link只是一个执行urllib的read()函数的 Package 器,它会为您捕获任何未完成的读取异常。如果您不想实现整个补丁,您可以在读取链接的地方抛出一个try/catch循环。例如:
字符串
对于Python 3
型
slmsl1lt2#
请注意,这个答案仅适用于Python 2(它于2013年发布)
我发现在我的情况下:发送HTTP/1.0请求,添加此,修复问题。
字符串
在我完成请求之后:
型
在我回到http 1.1之后,(对于支持1.1的连接):
型
技巧是使用http 1.0而不是默认的http/1.1 http 1.1可以处理块,但由于某种原因web服务器不,所以我们在http 1.0中处理请求
对于Python 3,它会告诉你
ModuleNotFoundError:No module named 'footer'
然后尝试使用http.client模块,它会解决这个问题
型
nwnhqdif3#
对我来说,有效的方法是将IncompleteRead作为异常捕获,并通过将其放入下面的循环中来收集您在每次迭代中设法读取的数据:(注意,我使用的是Python 3.4.1,urllib库在2.7和3.4之间发生了变化)
字符串
anhgbhbe4#
你可以使用
requests
来代替urllib2
。requests
基于urllib3
,所以它很少有任何问题。把它放在一个循环中尝试3次,它会更强大。你可以这样使用它:字符串
kx7yvsdv5#
python3 FYI
字符串
nwwlzxa76#
我发现是我的病毒检测器/防火墙导致了这个问题。AVG的“在线防护”部分。
mgdq6dx17#
诀窍是继续下载与'request.add_header(' Range ','bytes=%d-' % len(return_raw))'如果服务器支持它。
字符串
but5z9lq8#
我尝试了所有这些解决方案,没有一个对我有效,实际上,我没有使用urllib,而是使用了http.client(Python 3)
字符串
这每次都能很好地工作,而对于urllib,它每次都返回一个incompleteread异常。
ldfqzlk89#
我只是添加了一个异常来解决这个问题。
就像
字符串