zoukankan      html  css  js  c++  java
  • scrapy结合webkit抓取js生成的页面

    scrapy结合webkit抓取js生成的页面 - Safe3 - 博客园

    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

  • 相关阅读:
    float浮点型底层存储原理
    PermissionError: WinError
    django数据库设置sql_mode
    Git 之 git diff
    以太网数据格式与封装解封
    MYSQL进阶
    MYSQL基础
    Python连接MySQL数据库之pymysql模块使用
    Python装饰器进阶
    BootStrap框架
  • 原文地址:https://www.cnblogs.com/lexus/p/2390678.html
Copyright © 2011-2022 走看看