Urllib2.urlopen并请求冻结

时间:2014-02-27 16:03:38

标签: python python-2.7 web get httprequest

编辑:我发现我犯了一个错误,因为错误的原因不是urllib而是nltk,它无法处理来自这个确切页面的长字符串。对不起,这个。

我不知道为什么,但这不管我是否使用Urllib2.urlopen或在遇到特定网址时请求。

import requests
r = requests.get('SomeURL')
print html = r.text

这是它的行为。 1)当我想到一个200个网址的循环时,它每次都会冻结在完全相同的网址上。如果我不终止程序,它会在这里呆几个小时。 2)当你尝试使用循环之外的代码示例时,它可以工作。 3)如果我将这个网址列入黑名单,它会顺利通过循环。

它实际上不返回任何类型的错误代码,并且它在循环外工作良好,并且还设置了超时但它没有做任何事情。它仍然无限期地挂起。

有没有其他方法可以在一定时间后强制停止http get请求,因为超时不起作用。是否有除urllib2之外的其他库以及可以执行此任务的请求,并且是否超出了超时限制?

for i in range(0,mincount):
    code(call the request for urlist[i]) 
    It always works but freezes only when I request this site. If i had 200 request to yahoo   for example it would work. But when i try go to this particular url i cannot.  
#end

编辑:它是循环的标准,没有太大的错误空间。

1 个答案:

答案 0 :(得分:0)

我认为这只是一个非常慢的页面;在我的系统上,加载大约需要9.7秒。

如果你试图在短循环中运行它,它确实会冻结。

您可以尝试类似

的内容
links = [
    'SomeURL',
    'http://www.google.com/'
]

for link in links:
    try:
        html = requests.get(link, timeout=2.).content
        print("Successfully loaded {}".format(link))
    except requests.Timeout:
        print("Timed out loading {}".format(link))

给了我

Timed out loading SomeURL
Successfully loaded http://www.google.com/