【问题标题】:Emulate javascript _dopostback in python, web scraping在 python 中模拟 javascript _dopostback,网页抓取
【发布时间】:2010-10-10 01:47:47
【问题描述】:

这里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 代码或需要与浏览器交互。

【问题讨论】:

  • 您应该将链接添加到您所指的文本,而不是 LINK。

标签: javascript python mechanize web-scraping dopostback


【解决方案1】:

机械化页面并不建议您可以在 Python 中模拟 JavaScript。意思是您可以更改表单中的隐藏字段,从而欺骗网络服务器,使人1 选择了该字段。您仍然需要自己分析目标。

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

My thoughts 在这个问题上让我想到了三种可能的解决方案:

  1. 创建一个XULRunner 应用程序
  2. 浏览器自动化
  3. 尝试解释客户端代码

在这三个中,我只真正看到过关于 2 的讨论。我看到了一些东西 在商业抓取应用程序中接近 1,您基本上在其中创建 通过浏览网站并选择页面上的内容来编写脚本 希望将来提取脚本。

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

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

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

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

【讨论】:

  • 感谢您很好地解释了为什么我不能这样做 :-) 实际上至少现在我对这个问题有了更好的理解。再次感谢。
猜你喜欢
  • 1970-01-01
  • 2020-03-06
  • 2021-09-20
  • 2013-11-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-12-24
相关资源
最近更新 更多