使用Javascript抓取网站?

时间:2010-07-29 13:18:43

标签: javascript python screen-scraping

我正在尝试抓住并向严重依赖Javascript执行大部分操作的网站提交信息。当我在浏览器中禁用Javascript时,该网站甚至无法工作。

我在Google和SO上搜索了一些解决方案,有人建议我应该对Javascript进行逆向工程,但我不知道该怎么做。

到目前为止,我一直在使用Mechanize,它适用于不需要Javascript的网站。

有没有办法通过使用urllib2或类似的方式访问使用Javascript的网站? 我也愿意学习Javascript,如果这就是它。

6 个答案:

答案 0 :(得分:8)

你应该考虑使用Ghost,一个包装PyQt4 + WebKit hack的Python库。

这使得{4}成为WebKit客户端:

g

您可以使用import ghost g = ghost.Ghost() 抓取一个页面,然后g.open(url)将评估当前状态下的文档。

Ghost还有其他很酷的功能,比如注入JS和一些表单填充方法,你可以将生成的文档传递给BeautifulSoup,依此类推:g.content

到目前为止,Ghost是我发现的唯一能让Python变得简单的东西。我遇到的唯一限制是您无法轻松创建客户端对象的多个实例soup = bs4.BeautifulSoup(g.content),但您可以解决此问题。

答案 1 :(得分:8)

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

http://koaning.io/dynamic-scraping-with-python.html

基本上你做的是你有selenium库假装它是一个firefox浏览器,浏览器将等到所有javascript加载后继续传递你的html字符串。一旦你有了这个字符串,你就可以用beautifulsoup解析它。

答案 2 :(得分:7)

我遇到了完全相同的问题。这一点并不简单,但我终于找到了一个很好的解决方案,使用PyQt4.QtWebKit

您可以在此网页上找到解释:http://blog.motane.lu/2009/07/07/downloading-a-pages-content-with-python-and-webkit/

我已经测试过,我目前正在使用它,这很棒!

它的最大优点是它可以在服务器上运行,只使用X,没有图形环境。

答案 3 :(得分:6)

结帐crowbar。我没有任何经验,但我很好奇你的问题的答案,所以我开始谷歌搜索。我想知道这是否适合你。

http://grep.codeconsult.ch/2007/02/24/crowbar-scrape-javascript-generated-pages-via-gecko-and-rest/

答案 4 :(得分:6)

也许你可以使用Selenium Webdriver,我相信它有python绑定。我认为它主要用作测试网站的工具,但我想它也应该可用于搜索。

答案 5 :(得分:6)

我实际上建议使用Selenium。它主要用于从“用户角度测试Web应用程序,但它基本上是一个”FireFox“驱动程序。我实际上已经将它用于此目的......虽然我正在挖掘一个动态的AJAX网页。只要Javascript形式有一个可识别的“锚文本”,Selenium可以“点击”所有内容应该自行解决。

希望有所帮助