splash3.2学习笔记——HTTP API(1)

    Splash是一个javascript渲染工具。是一款支持HTTP API的轻量级web浏览器,通过Python3的twisted和QT5实现。QT(twisted)反应器通过QT主循环充分利用webkit的并发优势,使渲染服务完全异步。SPlash的一些主要特性:

  • 并行处理多个网页;
  • 获取HTML结果、截屏;
  • 通过关闭图片或使用Adblock Plus规则实现更快渲染;
  • 在页面上下文中执行自定义JavaScript;
  • 书写Lua浏览脚本;
  • 在Splash-Jupyter笔记本中开发Splash Lua脚本;
  • 获得HAR格式的详细渲染信息。

Splash HTTP API

    Splash通过HTTP API控制。对于所有的Splash端点,以下参数通过GET参数方式或在编码成JSON并使用Content-Type: application/json头部信息POST的方式发送。

    大多数Splash多功能端点提供exexcute和run的Splash特性;允许执行任意Lua渲染脚本。

    其余端点用在特定场合更为容易-例如,render.png返回一个可以被img src使用的PNG格式截图,不做其他处理,render.json在不进行页面交互场合使用很方便。

 render.html

     返回javascript渲染后的HTML页面。

    参数:

    url:字符串,必需

        要渲染的url

    baseurl:字符串,可选

        要渲染页面的基准url。

    timeout:浮点数,可选

         渲染超时参数(单位为秒,默认为30)

        默认情况下,最大允许超时为90s。使用--max-timeout命令行选项运行Splash可以覆盖该值。例如,以下命令用于配置最大超时时间为5分钟:

$ docker run -it -p 8050:8050 scrapinghub/splash --max-timeout 300
    resource_timeout:浮点数,可选

           个人网络请求延时参数。

    wait:浮点数,可选

        页面加载后等待更新时间(单位为秒,默认值为0);如果希望页面包含setInterval/setTimeout的javascript方法可以被执行,需要增大该参数,因为当该参数为0时,setInterval/setTimeout的回调函数不能被执行;当进行页面完全渲染时,PNG和JPEG的渲染也需要wait值非零。

        wait值必需小于timeout值。

    proxy:字符串,可选

        代理URL的格式为:

[protocol://][user:password@]proxyhost[:port])

        其中,protocol为http或socks5。如果端口未指定,则使用默认的1080端口。

    js:字符串,可选

        javascript文件名字

    js_source:字符串,可选

        在页面上下文中执行的javascript代码。

    filters:字符串,可选

        采用逗号分割的请求过滤器名字列表

    allowed_domains:字符串,可选

        允许域名逗号分隔列表。如果该列表存在,Splash将不加载任何不在该列表中域或子域下的内容。

    allowed_content_types:字符串,可选

        允许Content-type的逗号分割列表。如果该值存在,Splash将丢弃响应中Content-type不在列表中请求。

    forbidden_content_types:字符串,可选

        禁止Content-type的逗号分隔列表。功能与上一参数相反。

    viewport:字符串,可选

        浏览器渲染页面可视区域宽高,单位为像素,格式为“宽X高”,例如800x600。默认值为1024x768。

        viewport参数对于PNG和JPEG渲染更为重要;所有渲染端点均支持该参数,因为javascript代码执行依赖可视区域大小。

        考虑到向后兼容的问题,该参数也接受'full'作为参数值。

    images:整型,可选

        是否下载图片。值为1(下载图片)或0(不下载图片),默认值为1。

        注意,即使该参数值为0,缓存图片也可能显示。

    headers:JSON数组或对象,可选

        第一个传出请求的HTTP头。

        该选项只支持application/json的POST请求。值可以是形如(header_name, header_value)的JSON数组对或者头部名字为键,头部值为值的JSON对象。

        与其他头部不同,"User-Agent"头为特例:用于所有传出请求。

    body:字符串,可选

        如果方法为POST,被发送的HTTP POST请求主体。POST方法的默认content-type头是application/x-www-form-urlencoded

    http_method:字符串,可选

        传出Splash请求的HTTP方法。默认为GET,Splash也支持POST。

    save-args:JSON数组或一个逗号分隔字符串,可选

        存入缓存的参数名列表。Splash将每个参数存入内部缓存并返回包含每个参数SHA1哈希列表(一个使用分号分隔的形如name=hash键值对列表)的 X-Splash-Saved-Arguments HTTP头。

        客户端可以使用load_args参数用这些hashes代替参数值传递,这一特点对于参数值很大且不经常改变的情形非常有用(js_source或lua_source通常是很好的候选方案)

    load_args:JSON对象或字符串,可选

        从缓存中加载的参数值。load_args必须是{"name": "<SHA1 hash>", ...}JSON对象或者X-Splash-Saved-Arguments头原码(一个使用分号分隔的形如name=hash键值对列表)

        对于load_args中的每个参数,Splash使用一个给定的SHA1哈希值作为键,从内部缓存中获取值。如果值在缓存中,Splash将其作为参数值使用然后正常处理请求。如果不能找到参数,Splash返回HTTP 498状态码。这种情况下,客户端会重复请求,但是使用save_args并发送所有参数值。

        load_args和save_args允许不发送每个请求的大参数来保存网络流量(js_source和lua_source也是常用的候选方案)

        Splash使用LRU缓存存储值;入口数量有限,Splash每次重启,缓存都会清空。换句话说,存储是非持久的;客户端必需准备重发这些参数。

    html5_media:整型,可选

        HTML5媒体是否可用(例如<video>标签回放)。可能值为1(可用)和0(不可用),默认为0。

        HTML5 媒体默认不可用,是由于可能导致不稳定。未来Splash会默认它可用,所以想设置为不可用时,需要显式指定html5_media=0。

    实例:

    Curl实例:

curl 'http://localhost:8050/render.html?url=http://domain.com/page-with-javascript.html&timeout=10&wait=0.5'

        结果总是使用utf-8编码,通常使用render.html返回的HTML数据使用utf-8解码,即使结果中有以下标签:

<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">

render.png

        返回javascript渲染页面的PNG格式图片。

    参数:

    与render.html一样参数外加以下参数:

    width:整型,可选

        保持宽高比不变,调整渲染图像宽度至给定(单位:像素)。

    height:整型,可选

        裁剪渲染图像至给定高度值。常常用于使用宽度参数连接以生成固定大小的缩略图。

    render_all:整型,可选

# render with default quality
curl 'http://localhost:8050/render.jpeg?url=http://domain.com/'

# render with low quality
curl 'http://localhost:8050/render.jpeg?url=http://domain.com/&quality=30'

        可能值为1和0.当值为1时,在渲染前,扩展可视区域至包含整个页面(可能会非常长)。默认值为0.

        参数值为1时,要求wait参数非零。这是一个很不幸的约束,但是貌似是当值为1时,令渲染能够实现的唯一办法。

    scale_methos:字符串,可选

          可能值为raster(默认)和vector。如果该参数值为raster,通过width参数进行的重新缩放操作是像素级别。如果参数值为vector,渲染过程中的缩放操作为元素级。

    实例:

    Curl实例:

# render with timeout
curl 'http://localhost:8050/render.png?url=http://domain.com/page-with-javascript.html&timeout=10'

# 320x240 thumbnail
curl 'http://localhost:8050/render.png?url=http://domain.com/page-with-javascript.html&width=320&height=240'

    render.jpeg

        返回javascript渲染页面的JPEG格式图像

    参数:

        和render.png相同,外加以下参数:

    quality:整型,可选

        JPEG质量参数,范围为0到100,默认为75.

        注意,95以上的质量值应当避免;质量值为100是JPEG的部分压缩算法将被禁用,导致文件尺寸大,图片质量提高很少。

    Curl实例:

# render with default quality
curl 'http://localhost:8050/render.jpeg?url=http://domain.com/'

# render with low quality
curl 'http://localhost:8050/render.jpeg?url=http://domain.com/&quality=30'

       

   




 



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

yzpwslc

您的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值