【问题标题】:Mechanize Browser Timeout Not Working机械化浏览器超时不起作用
【发布时间】:2014-11-04 23:06:52
【问题描述】:

我遇到了mechanizetimeout 功能的问题。在大多数页面上,它都能完美运行,如果 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

首先,对于这个特定的 URL,这个脚本是否会为其他人挂起?其次,可能出了什么问题/我该如何调试?

【问题讨论】:

    标签: python timeout mechanize


    【解决方案1】:

    我不知道为什么该 url 请求挂起以进行机械化但使用 urllib2;请求回来了。也许他们有一些代码可以识别机械化,尽管将机器人设置为 false。

    我认为 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
    

    【讨论】:

    • Mechanize 在站点的其余部分上运行良好。问题不在于获得结果,而在于超时时无法终止。
    猜你喜欢
    • 1970-01-01
    • 2014-05-18
    • 1970-01-01
    • 2016-06-26
    • 2016-12-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多