• Splash 渲染引擎简介


    Splash文档地址:http://splash.readthedocs.io/en/latest/api.html
    Splash渲染引擎有以下功能
    1.为用户返回经过渲染的HTML页面或页面截图
    2.并发渲染多个页面
    3.关闭图片加载,加速渲染
    4.在页面中执行用户自定义的JS脚本代码
    5.执行用户自定义的渲染脚本(lua)

    Splash有多个服务端点
    1.render.html端点

    1. 请求地址 http://localhost/render.html
    2. 请求方式 GET/POST
    3. 返回类型 html
    参数 描述
    url 需要渲染页面的url
    timeout 渲染页面超时时间
    proxy 代理服务器地址
    wait 等待页面渲染的时间
    image 是否下载图片,默认为1
    js_sourse 用户自定义的JS代码,在渲染页面前执行

    示例代码

    import requests
    from scrapy.selector import Selector
    splash_url='http://localhost:8050/render.html'
    args={'url':'http://quotes.toscrape.com/js','timeout':5,'image':0}
    response=requests.get(splash_url,params=args)
    sel=Selector(response)
    sel.css('div.quote span.text').extract()
    print(sel)
    

    2.execute端点
    再爬取页面的时候,可能需要和页面进行交互,比如下拉等操作,这个时候就可以用execute端点来执行一些用户自定义的js代码

    参数 描述
    lua_source 用户自定义的lua脚本
    timeout 渲染页面超时时间
    proxy 代理服务器地址

    我们可以将execute端点的服务看作一个可用lua编程的浏览器。使用时需要传递一个用户自定义的lua脚本给Splash,该lua脚本包含想要模拟的浏览器行为,例如
    *打开某个页面
    *等待页面加载渲染
    *执行JS代码
    *获取HTTP响应头部
    *获取cookie

    示例代码

    import requests
    lua_script="
    function main()
    	splash:go('http://example.com')	#打开页面
    	splash:wait(0.5)		#等待加载
    	local title=splash:evaljs('document.title')	#执行js代码获取结果
    	return {title=title}	#返回json形式的结果
    "
    splash_url='http://localhost:8050/execute'
    headers={'content-type':'application/json'}
    data=json.dumps({'lua_source':lua_script})
    response=requests.get(splash_url,headers=heaers,data=data)
    print(response.content)
    

    splash对象常用的属性和方法
    1.splash.args属性:用户传入参数的表,可以访问用户传入的参数,如splash.args.wait
    2.splash.js_enabled属性:用于开启/禁止JS渲染,默认为开启
    3.splash.images_enabled属性:开启/关闭图片加载,默认为开启
    4.splash:go方法:例如splash:go{url,baseurl=nil,headers=nil,http_method=‘GET’,body=nil,formdata=nil}
    5.splash:wait方法:等待页面渲染
    6.splash:evaljs方法:执行一段js代码,并返回最后一句表达式的值
    7.splash:runjs:运行JS代码,不返回值
    8.splash:url
    9.splash:html
    10.splash:get——cookies():获取cookie信息

  • 相关阅读:
    'try(A a = new A())' VS 'try finally'
    pom中更换阿里云仓库时不要忽略了pluginRepositories
    dubbo-spring-boot的auto-configure示例报Not found exported service的解决办法
    前后端分离部署时如何保护前端代码不被匿名访问
    拒绝一次性买卖:MyBatis的mapper和repository可重复生成工具
    关于el-dialog,我更推荐的用法
    SqlServer导入数据到MySql
    ASP.NET伪静态 UrlRewrite(Url重写) 实现和配置
    如何优化游标--使用只读游标
    多台路由器上网配置
  • 原文地址:https://www.cnblogs.com/yfc0818/p/11072687.html
Copyright © 2020-2023  润新知