zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    RATE-MAX——alpha冲刺总结随笔
    RATE-MAX alpha冲刺第十天
    RATE-MAX alpha冲刺第九天
    团队作业第六次——Daily6+1站立式会议+β冲刺汇总
    问题总结(事后诸葛亮和组员交换事宜)
    凡事预则立
    测试随笔
    冲刺随笔
    alpha冲刺——第十天
    alpha冲刺——第九天
  • 原文地址:https://www.cnblogs.com/Safe3/p/2217965.html
Copyright © 2011-2022 走看看