我正在尝试取消排序的许多网址,我有一个网址集。下面的代码大部分时间都是有效的。但有时要花很长时间才能完成。例如,我在urlSet中有2950个。stderr告诉我2900已经完成,但是getUrlMapping没有完成。在
def getUrlMapping(urlSet):
# get the url mapping
urlMapping = {}
#rs = (grequests.get(u) for u in urlSet)
rs = (grequests.head(u) for u in urlSet)
res = grequests.imap(rs, size = 100)
counter = 0
for x in res:
counter += 1
if counter % 50 == 0:
sys.stderr.write('Doing %d url_mapping length %d \n' %(counter, len(urlMapping)))
urlMapping[ getOriginalUrl(x) ] = getGoalUrl(x)
return urlMapping
def getGoalUrl(resp):
url=''
try:
url = resp.url
except:
url = 'NULL'
return url
def getOriginalUrl(resp):
url=''
try:
url = resp.history[0].url
except IndexError:
url = resp.url
except:
url = 'NULL'
return url
也许它不会帮你,因为它已经过了很长时间,但仍然。。在
我对请求有一些问题,和你现在遇到的问题类似。对我来说,问题是下载一些页面的请求需要很长时间,但是使用任何其他软件(浏览器、curl、wget、python的urllib)一切都很好。。。在
在浪费了大量时间之后,我注意到服务器正在发送一些无效的头,例如,在一个“慢”页中,在
Content-type: text/html
之后,它开始以Header-name : header-value
的形式发送头(注意冒号前面的空格)。这在某种程度上破坏了Python用来按请求解析HTTP报头的email.header
功能,因此Transfer-encoding: chunked
报头没有被解析。在长话短说:在请求内容之前,手动将响应对象的
chunked
属性设置为True
,解决了这个问题。例如:花了很长时间但是
^{pr2}$ 工作太好了!在相关问题 更多 >
编程相关推荐