我正在尝试删除我在urlSet中的很多URL。以下代码大部分时间都有效。但有时需要很长时间才能完成。例如,我在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
答案 0 :(得分:0)
可能它不会帮助你,因为它已经过了很长时间但仍然......
我遇到了一些与请求有关的问题,类似于您所拥有的问题。对我来说问题是Requests需要花费很长时间来下载一些页面,但是使用任何其他软件(浏览器,curl,wget,python的urllib)一切都运行良好......
如果浪费了大量时间,我注意到服务器发送了一些无效的标头,例如,在一个“慢”页面中,Content-type: text/html
之后它开始以{{1}的形式发送标头注意冒号前面的空格。这会以某种方式破坏用于通过请求解析HTTP标头的Python Header-name : header-value
功能,因此未解析email.header
标头。
长话短说:在要求解决问题的内容之前,手动将Transfer-encoding: chunked
属性设置为响应对象的chunked
。例如:
True
需要很长时间,但
response = requests.get('http://my-slow-url')
print(response.text)
工作得很好!