【问题标题】:Python Mechanize: HTTP Error 428 Precondition FailedPython Mechanize:HTTP 错误 428 前提条件失败
【发布时间】:2016-02-01 17:07:59
【问题描述】:

我正在尝试使用 python mechanize 模块自动化网站上的流程。

使用以下代码,我正在刷新网站,直到找到我想要关注的链接:

            for link in br.links():            
               valuable = filter(lambda tpl: tpl[0]=='href', link.attrs)
               if len(valuable) == 0:
                   continue
               if 'book.php' in valuable[0][1]:
                   print link
                   req = br.follow_link(link)
                   file_handler = open("level2.html", "w")
                   file_handler.write(br.response().read())
                   file_handler.close()
                   not_done = False
                   break

一旦我找到包含“book.php”的链接,应用程序就会崩溃并出现以下错误:

文件“/home/max/Dokumente/dev/main.py”,第 43 行,运行中 req = br.follow_link(链接)

follow_link 中的文件“build/bdist.linux-x86_64/egg/mechanize/_mechanize.py”,第 569 行

打开文件“build/bdist.linux-x86_64/egg/mechanize/_mechanize.py”,第 203 行

文件“build/bdist.linux-x86_64/egg/mechanize/_mechanize.py”,第 255 行,在 _mech_open 中

mechanize._response.httperror_seek_wrapper:HTTP 错误 428:前提条件失败

这是什么意思?我实在想不通。我该如何解决这个错误?

【问题讨论】:

    标签: python mechanize


    【解决方案1】:

    正如here解释的那样:

    源服务器要求请求是有条件的。它的典型用途是避免“丢失更新”问题,即客户端获取资源的状态,修改它,然后将其放回服务器,同时第三方修改了服务器上的状态,导致冲突。

    这可能意味着处理后的链接中的 GET 参数突然过时了。

    【讨论】:

    • 在我的情况下,这是否意味着某人已经“预订”了它,因此不再可能?我没听错吗?
    • @Doc 解决此问题的一种建议方法是在 try/except 块中捕获此错误,如果触发此特定错误,则只需 continue。这样脚本将处理所有链接而不会卡住。
    猜你喜欢
    • 2017-12-29
    • 1970-01-01
    • 1970-01-01
    • 2018-08-12
    • 2020-06-27
    • 2016-04-05
    • 1970-01-01
    • 1970-01-01
    • 2022-11-09
    相关资源
    最近更新 更多