【发布时间】:2012-02-08 15:12:07
【问题描述】:
我想抓取一些动态加载其组件的网页。 这个页面有一个 onload 脚本,在浏览器中输入 URL 3-5 秒后我可以看到完整的页面。
问题是,当我调用br.open('URL') 时,响应是0 秒时的网页。
HTML(我想要的)和br.open('URL') 的结果在 3 到 5 秒后出现差异。
【问题讨论】:
我想抓取一些动态加载其组件的网页。 这个页面有一个 onload 脚本,在浏览器中输入 URL 3-5 秒后我可以看到完整的页面。
问题是,当我调用br.open('URL') 时,响应是0 秒时的网页。
HTML(我想要的)和br.open('URL') 的结果在 3 到 5 秒后出现差异。
【问题讨论】:
您遇到的问题是网页是通过 javascript 引擎在您的网络浏览器中呈现的。但是,mechanize 本身并没有执行 javascript 的能力,因此,无论您等待多长时间,您都不会仅使用 mechanize 获得缺少的 HTML。
有关如何抓取动态生成的内容的更多信息,请查看此question。
【讨论】:
用mechanize处理一个包含丰富javascripts内容的网页并不容易,但是根据不同的情况有办法得到你想要的。
如果有一些 json 请求来创建内容,那么您可以调用该 url 并尝试解析响应以获取内容,然后尝试正确加入它。
如果您需要使用某些表单,您可以创建一些表单域并在 mechanize 中设置它们的值。或者,只需编写一个方法,对您的POST 或GET 数据(引用特殊字符等)进行编码,然后使用mechanize.browser.open 方法发送它们。
但实际上,上面的一些选项并不容易做到,在使用 mechanize 进行此类项目之前,您必须三思而后行。
【讨论】: