您的位置:首页 > Web前端 > JavaScript

scrapy结合webkit抓取js生成的页面

2012-07-13 16:34 288 查看
1 scedule

scrapy 作为抓取框架,包括了spider,pipeline基础设施

2 webkit

scrapy 本身不能作为js engine,这就导致很多js生成的页面的数据会无法抓取到,因此,一些通用做法是webkit或者xmi_runner(firefox)。通过这个手段可以对于js生成的数据进行抓取。需要安装的包有

python-webkit (相关依赖自行解决)

Xvfb (用于非Xwindow环境)

3 开发downloader middleware
from scrapy.http import Request, FormRequest, HtmlResponse

import settings #必须要先导入,否则在导入gtk时会出错

import gtk

import webkit

import jswebkit

class WebkitDownloader( object ):

def process_request( self, request, spider ):

if spider.name in settings.WEBKIT_DOWNLOADER:

if( type(request) is not FormRequest ):

webview = webkit.WebView()

webview.connect( 'load-finished', lambda v,f: gtk.main_quit() )

webview.load_uri( request.url )

gtk.main()

js = jswebkit.JSContext( webview.get_main_frame().get_global_context() )

renderedBody = str( js.EvaluateScript( 'document.body.innerHTML' ) )

return HtmlResponse( request.url, body=renderedBody )

4 配置

在scrapy的settings.py中加入:

#which spider should use WEBKIT

WEBKIT_DOWNLOADER=['ccb']

DOWNLOADER_MIDDLEWARES = {'rate_crawler.dowloader.WebkitDownloader': 543,}

import os

os.environ["DISPLAY"] = ":0"

5 使用

启动 Xvfb (假设DISPLAY=:0)

要与settings.py中的DISPLAY对应(本例中是:0)。

scrapy crawl xxx
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: