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

来源:互联网 发布:淘宝客服催单用语 编辑:程序博客网 时间:2024/05/10 03:34


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 gtkimport webkitimport jswebkitimport settings 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 WEBKITWEBKIT_DOWNLOADER=['ccb'] DOWNLOADER_MIDDLEWARES = {    'rate_crawler.dowloader.WebkitDownloader': 543,}    import osos.environ["DISPLAY"] = ":0"

5 使用

启动 Xvfb (假设DISPLAY=:0)

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

scrapy crawl xxx

0 0