【发布时间】:2014-03-23 17:24:28
【问题描述】:
我通过这个过程浏览了大量的 url,我使用多个线程。但是我使用的第一个版本
myreq.fp._sock.fp._sock.shutdown(socket.SHUT_RDWR)
关闭连接似乎不是一直下载所有数据。 另一方面,当我改为使用
#myreq.fp._sock.recv=None # hacky avoidance
有时与某些网站的连接会挂起很长时间。超过一分钟。
代码:
useragent = {'User-Agent':'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_4) AppleWebKit/536.11 (KHTML, like Gecko) Chrome/20.0.1132.57 Safari/536.11'}
request = urllib2.Request(url,None,useragent)
try :
myreq = urllib2.urlopen(request, timeout = threadtimeout)
html_code = myreq.read()
myreq.fp._sock.fp._sock.shutdown(socket.SHUT_RDWR)
#myreq.fp._sock.recv=None # hacky avoidance
myreq.close()
except Exception :
html_code = ""
【问题讨论】:
-
" 与某些网站的连接长时间挂起" -- 什么意思?如果您在谈论
TIME_WAIT状态,那么几分钟的延迟是正常的(尽管您的代码中没有任何内容应该等待它) -
不,它只是没有按应有的方式响应。无论如何,它与请求库一起工作得更好。
-
“它只是没有按应有的方式响应”——它是如何响应的?它应该如何回应?如果你放弃
.shutdown()电话会发生什么? -
我正在尝试从页面中抓取数据。但我在 4 分钟内没有收到其中一些页面的响应,超时时间为 10 秒。当我不使用 .shutdown() 时。当我使用它时,它只会下载一定比例的页面。
-
它似乎无法处理 pdf 文件,因为某些 url 是指向 pdf 的链接
标签: python http python-2.7 web-scraping urllib2