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
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
相关文章推荐
- scrapy结合webkit抓取js生成的页面
- scrapy结合webkit抓取js生成的页面
- scrapy结合webkit抓取js生成的页面
- scrapy结合webkit抓取js生成的页面
- (python解析js)scrapy结合ghost抓取js生成的页面,以及js变量的解析
- (python解析js)selenium结合phantomjs抓取js生成的页面
- scrapy-splash爬取JS生成的动态页面
- Scrapy webkit 获取js代码执行结果后再抓取
- Scrapy框架学习(七)----Scrapy与scrapy-splash框架结合,快速加载js页面
- php结合phantomjs实现网页截屏、抓取js渲染的页面
- 利用phantomjs+selenium抓取fund.eastmoney.com/fund.html网站第二页js生成的页面
- 利用scrapy-splash爬取JS生成的动态页面
- 使用phantomjs抓取JS动态生成的页面
- 如何抓取Js动态生成数据且以滚动页面方式分页的网页
- 利用scrapy-splash爬取JS生成的动态页面
- 使用phantomjs抓取JS动态生成的页面
- 使用selenium抓取JS动态生成的页面
- Scrapy爬虫中使用Splash抓取动态JS页面
- 如何抓取Js动态生成数据且以滚动页面方式分页的网页
- 抓取Js动态生成数据且以滚动页面方式分页的网页