Chinaunix首页 | 论坛 | 博客
  • 博客访问: 65112
  • 博文数量: 20
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 198
  • 用 户 组: 普通用户
  • 注册时间: 2013-03-31 17:15
文章分类

全部博文(20)

文章存档

2014年(1)

2013年(19)

我的朋友

分类: Python/Ruby

2013-05-05 15:31:35

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

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

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

Xvfb (用于非Xwindow环境)

开发downloader middleware

点击(此处)折叠或打开

  1. from scrapy.http import Request, FormRequest, HtmlResponse
  2.  
  3. import gtk
  4. import webkit
  5. import jswebkit
  6. import settings
  7.  
  8. class WebkitDownloader( object ):
  9.     def process_request( self, request, spider ):
  10.         if spider.name in settings.WEBKIT_DOWNLOADER:
  11.             if( type(request) is not FormRequest ):
  12.                 webview = webkit.WebView()
  13.                 webview.connect( 'load-finished', lambda v,f: gtk.main_quit() )
  14.                 webview.load_uri( request.url )
  15.                 gtk.main()
  16.                 js = jswebkit.JSContext( webview.get_main_frame().get_global_context() )
  17.                 renderedBody = str( js.EvaluateScript( 'document.body.innerHTML' ) )
  18.                 return HtmlResponse( request.url, body=renderedBody )

配置
在scrapy的settings.py中加入

点击(此处)折叠或打开

  1. #which spider should use WEBKIT
  2. WEBKIT_DOWNLOADER=['ccb']
  3.  
  4. DOWNLOADER_MIDDLEWARES = {
  5.     'rate_crawler.dowloader.WebkitDownloader': 543,
  6. }
  7.  
  8. import os
  9. os.environ["DISPLAY"] = ":0"

启动 Xvfb (假设DISPLAY=:0)

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

scrapy crawl xxx



阅读(2899) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~