如何让mechanize等到网页‘完全’加载?
我想抓取一个动态加载内容的网页。这个网页有一个加载脚本,我在浏览器里输入网址后,大约3到5秒钟才能看到完整的页面。
问题是,当我调用 br.open('URL')
时,得到的响应是网页在0秒时的状态。也就是说,3到5秒后,HTML内容(我想要的)和 br.open('URL')
的结果之间有差别。
2 个回答
12
你遇到的问题是,网页是在你的浏览器里通过JavaScript引擎来显示的。不过,mechanize这个工具自己不能执行JavaScript,所以不管你等多久,光用mechanize是拿不到你缺失的HTML内容的。
想了解更多关于如何抓取动态生成的内容的信息,可以看看这个 问题。
1
用 mechanize 处理一个包含丰富 JavaScript 内容的网页并不简单,但根据不同的情况,有一些方法可以帮助你实现目标。
如果网页是通过一些 JSON 请求来生成内容的,你可以直接调用这些网址,尝试解析返回的数据,以获取你需要的内容,然后把它们合并在一起。
如果你需要使用表单,可以在 mechanize 中创建一些表单字段,并设置它们的值。或者,简单地写一个方法来编码你的
POST
或GET
数据(比如处理特殊字符等),然后用mechanize.browser.open
方法发送这些数据。如果网页有一些基于 JavaScript 的安全功能(比如在提交表单数据之前进行特殊编码),那么你可以使用 node.js 这样的 JavaScript 应用服务器来处理一些 JavaScript 代码块。
不过实际上,上述一些选项并不容易实现,在使用 mechanize 进行这类项目之前,你需要仔细考虑一下。