为什么Mechanize(-Python)似乎忽略了一些隐藏的表单字段而不是其他字段呢?

时间:2012-11-12 19:11:48

标签: python mechanize-python

我正在处理一个包含多个字段,一些文本和几个隐藏的表单。问题是当我查看我的mechanize.Browser对象“看到”的字段列表时,缺少一些重要的隐藏字段,但不是全部。根据{{​​3}}最受欢迎的答案,这种情况正在发生,因为网页正在查询用户代理字符串。对我来说情况并非如此,我知道这有两个原因:

  1. 当我将“已删除”表单保存到文件时,我可以看到缺少的字段,
  2. 我改变了我的浏览器对象的用户代理字符串,正如该解决方案所暗示的那样,但它对我没有帮助。
  3. 帮助我的是this similar question这个问题,但我不明白为什么会这样。为什么Mechanize会“看到”某些隐藏的表单字段而不是其他字段,需要手动输入缺少的字段?

1 个答案:

答案 0 :(得分:1)

当然,我不知道你真正想要的是什么 - 但是作为一个多年来一直在抓网页的人,我必须给你一些不请自来的建议。我提前道歉。

我强烈建议你过渡到可以处理javascript的东西。 Mechanize是一个很棒的模块,它在白天非常有用,但是网络是闪烁的灯光,CSS和跳舞的宝宝,你必须点击。

我说这个的原因是,“隐藏”字段可能是花哨的东西,或者它们可能是javascript修改形式,你会浪费数小时试图逆向工程如何工作只是锤方形钉进入圆形孔。

我建议现代但不幸的是机械化的重量级替代品是:

  • phantomjs提供基于WebKit的以javascript为中心的方式与网页交互(无头,这是一个奖励)它是基于Qt的,但具有可靠的发布二进制文件,如果你从源代码构建它实际上包含它需要运行的所有东西,而不必与某些特定版本的Qt同步。

  • 对于QtWebKit的
  • PySide绑定虽然可以有一点学习曲线,但是恕我直言,我最喜欢的只是因为能够进入浏览器并让我的手弄脏看到它很好这是怎么回事。

  • WebKit还提供了一个很好的(尽管Python支持很少)接口,您可以在浏览器中启用websocket服务器,并使用定义的in Inspector.json API通过websockets进行驱动。 Stock Chrome支持开箱即用。您可以找到更多详细信息on the Chrome developer website.

    所以,几乎WebKit很重要,与你所询问的内容毫无关系 - 但从长远来看,这将是你最终能够真正自动导航和抓取网络的地方。 / p>