当前位置: 代码迷 >> Web前端 >> (转)scrapy组合webkit抓取js生成的页面
  详细解决方案

(转)scrapy组合webkit抓取js生成的页面

热度:788   发布时间:2012-09-09 09:27:54.0
(转)scrapy结合webkit抓取js生成的页面

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 gtk
import webkit
import jswebkit
import 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 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

  相关解决方案