机械化浏览器超时不起作用

时间:2014-11-04 23:06:53

标签: python timeout mechanize

我遇到了mechanize timeout功能的问题。在大多数页面上它都可以正常工作,如果URL在合理的时间内无法加载,则会引发错误:urllib2.URLError: <urlopen error timed out>。但是,在某些页面上,计时器不起作用,程序即使对键盘中断也没有响应。以下是发生这种情况的示例页面:

import mechanize

url = 'https://web.archive.org/web/20141104183547/http://www.dallasnews.com/'

br = mechanize.Browser()
br.set_handle_robots(False)
br.addheaders = [('User-agent', 'Firefox')]
html = br.open(url, timeout=0.01).read() #hangs on this page, timeout set extremely low to trigger timeout on all pages for debugging

首先,此脚本是否针对此特定网址的其他人挂起?第二,可能出现什么问题/如何调试?

1 个答案:

答案 0 :(得分:-2)

我不知道为什么url请求会挂起机械化但是使用urllib2;请求回来了。也许他们有一些识别机械化的代码,尽管机器人设置为假。

我认为urllib2应该是适合您情况的好方法

import mechanize
import urllib2
url = 'https://web.archive.org/web/20141104183547/http://www.dallasnews.com/'

try:
    br = mechanize.Browser()
    br.set_handle_robots(False)
    br.addheaders = [('User-Agent', 'Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.0.1) Gecko/2008071615 Fedora/3.0.1-1.fc9 Firefox/3.0.1')]
    html = br.open(url).read() #set_handle_robots
except:
    req = urllib2.Request(url, headers={'User-Agent' : 'Mozilla/5.0 (iPhone; U; CPU iPhone OS 3_0 like Mac OS X; en-us) AppleWebKit/528.18 (KHTML, like Gecko) Version/4.0 Mobile/7A341 Safari/528.16'}) 
    con = urllib2.urlopen( req )
    html = con.read()
print html