2014-02-27 96 views
2

编辑:我发现我犯了一个错误,因为错误的原因是没有的urllib不过,NLTK,这是​​不能够处理这些来自这个确切页的长字符串。对不起,这个。Urllib2.urlopen并要求冻结

我不知道为什么,但如果我使用Urllib2.urlopen或请求时,我遇到一个特定的URL不管。

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

这是它的行为。 1)当我想到一个200个URL的循环时,它每次都会在同一个URL上冻结。如果我不终止程序,它会在这里呆上几个小时。 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 

编辑:这是一个循环标准,没有太多的错误空间。

+0

尝试httplib2的https://github.com/jcgregorio/httplib2 – Ashalynd

+0

我想要的模块。 – Brana

+0

'timeout'选项有效。这可能是由于你的循环代码。你可以添加代码的循环部分吗?你在那部分使用'while'语句吗? –

回答

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/ 
+0

我试过几次循环,每次1000+秒后都没有加载。 python与ajax网站有问题吗? – Brana

+0

实际上,似乎只有一些与我使用的for循环有关的错误。这件东西对我来说在10秒内加载,但当它在循环中时它不会加载。有趣的是,yahoo.com和任何其他网站从循环工作,但这个网站没有。 – Brana