用python生成的javascript生成的html

时间:2010-01-27 16:20:22

标签: javascript python browser screen-scraping

我需要用python抓一个站点。我使用urlib模块获取源html代码,但我还需要抓取一些由javascript函数生成的html代码(包含在html源代码中)。这个功能在网站中的作用是当你按下一个按钮时输出一些HTML代码。如何用python代码“按下”这个按钮? scrapy可以帮助我吗?我用firebug捕获了POST请求,但是当我尝试在url上传递它时,我收到403错误。有什么建议吗?

5 个答案:

答案 0 :(得分:10)

在Python中,我认为Selenium 1.0是要走的路。它是一个库,允许您从您选择的语言控制真正的Web浏览器。

您需要在运行脚本的计算机上安装有问题的Web浏览器,但它看起来是以编程方式查询使用大量JavaScript的网站的最可靠方式。

答案 1 :(得分:9)

由于这里没有全面的答案,我会继续写下一个。

要刮掉JS渲染的页面,我们需要一个具有JavaScript引擎的浏览器(e.i,支持JavaScript渲染)

Mechanize url2lib 等选项不起作用,因为支持JavaScript。

所以你在做什么:

设置PhantomJS以使用Selenium运行。在为它们安装依赖项(参考this)之后,您可以使用以下代码作为示例来获取完全呈现的网站。

from selenium import webdriver

driver = webdriver.PhantomJS()
driver.get('http://jokes.cc.com/')
soupFromJokesCC = BeautifulSoup(driver.page_source) #page_source fetches page after rendering is complete
driver.save_screenshot('screen.png') # save a screenshot to disk

driver.quit()

答案 2 :(得分:4)

我以前必须这样做(在.NET中)你基本上必须托管一个浏览器,让它点击按钮,然后查询浏览器的DOM(文档对象模型)以获取生成的HTML。

这绝对是Web应用程序向Ajax / Javascript方法转变为生成HTML客户端方面的缺点之一。

答案 3 :(得分:3)

我使用的是webkit,它是Chrome和Safari背后的浏览器渲染器。有Python bindings to webkit through Qt。这是一个完整的example to execute JavaScript and extract the final HTML

答案 4 :(得分:2)

对于Scrapy(伟大的python抓取框架),有scrapyjs:一个额外的下载程序处理程序/中间件处理程序,能够抓取javascript生成的内容。

它基于pygtk,python-webkit和python-jswebkit的webkit引擎,非常简单。