抓取动态网站

12 投票
8 回答
8546 浏览
提问于 2025-04-11 09:34

在抓取一个动态网站时,最好的方法是什么?这个网站的大部分内容都是通过看起来像是ajax请求生成的。我之前用过Mechanize、BeautifulSoup和Python的组合,但我想尝试一些新的东西。

--补充说明--

更详细一点:我想抓取CNN的初选数据库。那里有很多信息,但似乎没有提供API。

8 个回答

4

Selenium IDE 是一个用于测试的工具,我用它来做很多屏幕抓取。虽然它对一些事情处理得不好,比如 Javascript 的 window.alert() 和弹出窗口,但它能通过实际触发点击事件和在文本框中输入内容来完成页面上的工作。因为 IDE 部分是在 Firefox 浏览器中运行的,所以你不需要管理会话等问题,Firefox 会帮你处理这些。这个 IDE 会记录测试过程并可以回放。

它还可以导出 C#、PHP、Java 等代码,用来构建可以在 Selenium 服务器上执行的编译测试或抓取工具。我已经为我的几个 Selenium 脚本这样做过,这样存储抓取到的数据到数据库就简单多了。

编写和修改脚本相对简单,里面的内容像是 ("clickAndWait", "submitButton") 这样的指令。根据你描述的情况,这个工具值得一试。

7

我找到的最佳解决办法是使用Firebug来监控XmlHttpRequests(也就是一些网络请求),然后用一个脚本把这些请求重新发送一遍。

7

这个问题比较复杂,因为你要么得针对每个网站去分析它们的JavaScript代码,要么就得实现一个JavaScript引擎来运行这些脚本(这也有很多麻烦和挑战)。

这个方法比较重,但我见过有人用GreaseMonkey脚本来做到这一点——让Firefox浏览器渲染所有内容并运行JavaScript,然后再提取页面上的元素。如果需要的话,你甚至可以在页面上模拟用户的操作。

撰写回答