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

  • 相关阅读:
    xampp+vscode开发php的配置流程
    如何开始学习以太坊及区块链
    java动态生成带下拉框的Excel导入模板
    汉字转拼音
    Git+Gradle+Eclipse构建项目
    test
    MacOS这idea快捷键
    HashMap扩容全过程
    NIO理解
    详解MySQL 内连接、外连接、左连接、右连接
  • 原文地址:https://www.cnblogs.com/Safe3/p/2217965.html
Copyright © 2011-2022 走看看