如何抓取启用JavaScript的网站?
我正在尝试抓取并提交一些依赖于Javascript的网站信息。这些网站在我关闭浏览器中的Javascript时根本无法使用。
我在谷歌和StackOverflow上搜索了一些解决方案,有人建议我应该逆向工程Javascript,但我完全不知道该怎么做。
到目前为止,我一直在使用Mechanize,它可以在不需要Javascript的网站上正常工作。
有没有办法通过urllib2或类似的工具访问使用Javascript的网站?如果需要的话,我也愿意学习Javascript。
6 个回答
我也遇到过完全一样的问题。这可不是件简单的事,但我最终找到了一种很好的解决办法,使用的是 PyQt4.QtWebKit
。
你可以在这个网页上找到详细的解释: http://blog.motane.lu/2009/07/07/downloading-a-pages-content-with-python-and-webkit/
我已经测试过了,现在也在用,效果非常好!
它最大的优点是可以在服务器上运行,只需要 X,不需要图形界面。
你可以看看 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
客户端对象,但你可以找到解决办法。
我写了一个关于这个主题的小教程,可能会对你有帮助:
http://koaning.io.s3-website.eu-west-2.amazonaws.com/dynamic-scraping-with-python.html
简单来说,你需要用selenium这个库来模拟一个火狐浏览器。这个浏览器会等到所有的JavaScript都加载完毕后,才会继续给你返回HTML内容。一旦你拿到了这个HTML字符串,就可以用beautifulsoup来解析它。