如何抓取启用JavaScript的网站?

18 投票
6 回答
28928 浏览
提问于 2025-04-16 02:01

我正在尝试抓取并提交一些依赖于Javascript的网站信息。这些网站在我关闭浏览器中的Javascript时根本无法使用。

我在谷歌和StackOverflow上搜索了一些解决方案,有人建议我应该逆向工程Javascript,但我完全不知道该怎么做。

到目前为止,我一直在使用Mechanize,它可以在不需要Javascript的网站上正常工作。

有没有办法通过urllib2或类似的工具访问使用Javascript的网站?如果需要的话,我也愿意学习Javascript。

6 个回答

8

我也遇到过完全一样的问题。这可不是件简单的事,但我最终找到了一种很好的解决办法,使用的是 PyQt4.QtWebKit

你可以在这个网页上找到详细的解释: http://blog.motane.lu/2009/07/07/downloading-a-pages-content-with-python-and-webkit/

我已经测试过了,现在也在用,效果非常好!

它最大的优点是可以在服务器上运行,只需要 X,不需要图形界面。

9

你可以看看 Ghost,这是一个Python库,它结合了PyQt4和WebKit的技术。

这样一来,g 就成了WebKit的客户端:

import ghost
g = ghost.Ghost()

你可以用 g.open(url) 来打开一个网页,然后 g.content 就会显示当前网页的内容。

Ghost还有其他很酷的功能,比如可以注入JavaScript代码和一些表单填写的方法,你还可以把得到的网页内容传给BeautifulSoup等工具:soup = bs4.BeautifulSoup(g.content)

到目前为止,我发现Ghost是唯一一个能让这类操作在Python中变得简单的工具。我遇到的唯一限制是,你不能轻松地创建多个 ghost.Ghost 客户端对象,但你可以找到解决办法。

11

我写了一个关于这个主题的小教程,可能会对你有帮助:

http://koaning.io.s3-website.eu-west-2.amazonaws.com/dynamic-scraping-with-python.html

简单来说,你需要用selenium这个库来模拟一个火狐浏览器。这个浏览器会等到所有的JavaScript都加载完毕后,才会继续给你返回HTML内容。一旦你拿到了这个HTML字符串,就可以用beautifulsoup来解析它。

撰写回答