Python grequests需要很长时间才能完成

2024-10-01 00:15:15 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试取消排序的许多网址,我有一个网址集。下面的代码大部分时间都是有效的。但有时要花很长时间才能完成。例如,我在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

Tags: inurlforreturndefstderrcounterresp
1条回答
网友
1楼 · 发布于 2024-10-01 00:15:15

也许它不会帮你,因为它已经过了很长时间,但仍然。。在

我对请求有一些问题,和你现在遇到的问题类似。对我来说,问题是下载一些页面的请求需要很长时间,但是使用任何其他软件(浏览器、curl、wget、python的urllib)一切都很好。。。在

在浪费了大量时间之后,我注意到服务器正在发送一些无效的头,例如,在一个“慢”页中,在Content-type: text/html之后,它开始以Header-name : header-value的形式发送头(注意冒号前面的空格)。这在某种程度上破坏了Python用来按请求解析HTTP报头的email.header功能,因此Transfer-encoding: chunked报头没有被解析。在

长话短说:在请求内容之前,手动将响应对象的chunked属性设置为True,解决了这个问题。例如:

response = requests.get('http://my-slow-url')
print(response.text)

花了很长时间但是

^{pr2}$ 工作太好了!在

相关问题 更多 >