使用Javascript抓取网站?

问题描述 投票:13回答:6

我正在努力将信息提交给严重依赖Javascript来完成其大部分操作的网站。当我在浏览器中禁用Javascript时,该网站甚至无法工作。

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

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

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

javascript python screen-scraping
6个回答
8
投票

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

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

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


8
投票

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

这使得g成为WebKit客户端:

import ghost
g = ghost.Ghost()

您可以使用g.open(url)获取页面,然后g.content将评估当前状态的文档。

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

到目前为止,Ghost是我发现的唯一能让Python变得简单的东西。我遇到的唯一限制是你不能轻易地创建客户端对象ghost.Ghost的多个实例,但你可以解决这个问题。


7
投票

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

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

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

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


6
投票

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

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


6
投票

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


6
投票

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

希望有所帮助

© www.soinside.com 2019 - 2024. All rights reserved.