在python中模拟javascript __dopostback,web抓取

时间:2010-10-10 01:47:47

标签: javascript python mechanize web-scraping dopostback

这里LINK建议可以“弄清楚JavaScript正在做什么并在Python代码中模拟它:”这就是我想帮助做的事情,即我的问题。我如何模仿javascript:__ doPostBack?

来自网站的代码(完整页面来源LINK

<a style="color: Black;" href="javascript:__doPostBack('ctl00$ContentPlaceHolder1$gvSearchResults','Page$2')">2</a>

当然我基本上知道从哪里开始。

提前感谢您的帮助和想法

好的,有很多帖子询问如何在使用python库mechanize,beautifulsoup ....进行网页报废时点击javascript按钮,类似。我看到很多“不支持的”响应使用了这个非python解决方案。我认为解决这个问题的python解决方案对许多人来说都是非常有益的。在这种情况下,我不是在寻找使用x,y或z这些不是python代码或需要与浏览器交互的答案。

2 个答案:

答案 0 :(得分:3)

机械化页面并不表示您可以在Python中模拟JavaScript。它表示你可以更改表单中的隐藏字段,从而欺骗人类 1 选择了该字段的Web服务器。您仍然需要自己分析目标。

除非您希望在Python中创建JavaScript解释器,否则将不存在基于Python的解决方案。

关于这个问题的{p> My thoughts让我得到了三种可能的解决方案:

  1. 创建XULRunner申请
  2. 浏览器自动化
  3. 尝试解释客户端代码
  4. 在这三个人中,我只是真的看过2.我见过的东西 在商业抓取应用程序中接近1,您基本上创建 脚本通过在网站上浏览并选择您所在页面上的内容 希望将来能够提取脚本。

    1可能通过接受a来使用Python脚本 wsgi请求对象的序列化(JSON?),让应用程序获取 URL,然后将处理过的页面作为wsgi Response对象发送。你可以 可能包围urllib2周围的一些中间件来实现这一目标。矫枉过正 可能,但想一想有趣。

    2通常通过Selenium RC(远程控制)实现,这是一个以测试为中心的 工具。它提供了一些方法,如getHtmlSource,但我提供的大多数人 听说使用它得不喜欢它的API。

    3我不知道。 node.js现在很热,但我没有 触动了它。我从来没能在我的Ubuntu上构建spidermonkey 机器,所以我也没有接触过。我的预感是为了这样做 这样,您就可以向JS提供HTML源代码和您的详细信息 解释器,如果需要伪造成你的用户代理等 JavaScript想要重新连接服务器。

    1 从技术上讲,更符合JavaScript的用户代理,几乎总是人类使用的网络浏览器

答案 1 :(得分:0)

最好的方法是使用Web浏览器。我们对iMacros for Firefox使用web scraping取得了非常好的成功。它也适用于Python(我们将它与C#一起使用)。

使用Web浏览器的缺点是,您无法获得与Mechanize等无头工具相同的性能。但它的巨大优势在于它适用于任何网站。