当前位置: 首页 > wzjs >正文

无锡高端网站设计微信小商店怎么开通

无锡高端网站设计,微信小商店怎么开通,xampp做网站,用什么工具建设网站目录 前言 一、Splash 对象方法(后续) 二、Splash HTTP API 调用 三、Splash 负载均衡配置 前言 在网页数据抓取过程中,面对动态渲染的页面,Splash 工具凭借其强大的功能和灵活性,成为了开发者的得力助手。本文将继…

目录

前言

一、Splash 对象方法(后续)

二、Splash HTTP API 调用

三、Splash 负载均衡配置


前言

        在网页数据抓取过程中,面对动态渲染的页面,Splash 工具凭借其强大的功能和灵活性,成为了开发者的得力助手。本文将继续上节的讲解,详细介绍 Splash 的对象方法、HTTP API 调用以及负载均衡配置,帮助你更好地利用 Splash 实现高效的页面抓取。

一、Splash 对象方法(后续)

(一)内容与资源操作

1. `set_content`:该方法可直接设置页面内容,常用于测试或模拟特定页面结构。

function main(splash)assert(splash:set_content("<html><body><h1>hello</h1></body></html>"))return splash:png()
end

运行此脚本会生成包含 `<h1>hello</h1>` 的页面截图。

2. `html`:用于获取渲染后的页面源代码。

function main(splash, args)splash:go("https://httpbin.org/get")return splash:html()
end

返回的是包含请求头、响应数据的 HTML 文本。

3. `png`/`jpeg`:分别用于获取页面的 PNG 和 JPEG 格式截图。JPEG 格式还支持设置质量参数。

-- PNG 截图
function main(splash, args)splash:go("https://www.taobao.com")return splash:png()
end-- JPEG 截图(支持质量参数)
function main(splash, args)splash:go("https://www.taobao.com")return splash:jpeg{quality=80}
end

4. `har`:获取页面加载过程的 HAR 格式日志,包含资源请求详情,如 CSS、JS 等资源的加载时间、状态码等。

function main(splash, args)splash:go("https://www.baidu.com")return splash:har()
end

(二)浏览器状态操作

1. `url`:获取当前页面的 URL。

function main(splash, args)splash:go("https://www.baidu.com")return splash:url()
end

2. `get_cookies`/`add_cookie`/`clear_cookies`
    - `get_cookies`:获取当前页面的 Cookies。

function main(splash, args)splash:go("https://www.baidu.com")return splash:get_cookies()
end

  - `add_cookie`:添加自定义 Cookie。

function main(splash)splash:add_cookie{name="sessionid",value="237465ghgfsd",path="/",domain="http://example.com"}splash:go("http://example.com/")return splash:html()
end


    - `clear_cookies`:清空所有 Cookies。

function main(splash)splash:go("https://www.baidu.com/")splash:clear_cookies()return splash:get_cookies()
end

(三)浏览器配置操作

1. `get_viewport_size`/`set_viewport_size`/`set_viewport_full`
    - `get_viewport_size`:获取当前视口尺寸(宽高)。

function main(splash)splash:go("https://www.baidu.com/")return splash:get_viewport_size()
end

    - `set_viewport_size`:设置视口尺寸。

function main(splash)splash:set_viewport_size(400, 700)assert(splash:go("https://linshantang.blog.csdn.net/"))return splash:png()
end

    - `set_viewport_full`:设置全屏视口。

function main(splash)splash:set_viewport_full()assert(splash:go("https://linshantang.blog.csdn.net/"))return splash:png()
end

2. `set_user_agent`/`set_custom_headers`
    - `set_user_agent`:设置请求的 User - Agent。

function main(splash)splash:set_user_agent('Splash')splash:go("http://httpbin.org/get")return splash:html()
end

    - `set_custom_headers`:设置任意请求头字段。

function main(splash)splash:set_custom_headers{["User-Agent"] = "Splash",["Site"] = "Splash"}splash:go("http://httpbin.org/get")return splash:html()
end

(四)页面元素操作

1. `select`/`select_all`
    - `select`:通过 CSS 选择器选取首个匹配元素。

function main(splash)splash:go("https://www.baidu.com/")local input = splash:select("#kw")input:send_text('Splash')splash:wait(3)return splash:png()
end

    - `select_all`:选取所有匹配元素并遍历。

function main(splash)local treat = require('treat')assert(splash:go("http://quotes.toscrape.com/"))local texts = splash:select_all('.quote .text')local results = {}for index, text in ipairs(texts) doresults[index] = text.node.innerHTMLendreturn treat.as_array(results)
end

2. `mouse_click`:模拟鼠标点击元素,支持坐标或元素对象。

function main(splash)splash:go("https://www.baidu.com/")local input = splash:select("#kw")input:send_text('Splash')local submit = splash:select('#su')submit:mouse_click()splash:wait(3)return splash:png()
end

二、Splash HTTP API 调用

(一)基础接口:获取渲染结果

1. `render.html`:获取渲染后的 HTML 源码。

curl http://localhost:8050/render.html?url=https://www.baidu.com&wait=2
import requests
url = "http://localhost:8050/render.html?url=https://www.taobao.com&wait=5"
print(requests.get(url).text)

2. `render.png`/`render.jpeg`:获取截图,支持尺寸和质量参数。

response = requests.get("http://localhost:8050/render.png?url=https://www.jd.com&width=1000&height=700")
with open("jd.png", "wb") as f:f.write(response.content)

 3. `render.har`/`render.json`
    - `render.har`:获取 HAR 格式的加载日志。

curl http://localhost:8050/render.har?url=https://www.jd.com&wait=5

     - `render.json`**:获取综合 JSON 数据,支持 `html`、`png`、`har` 等参数。

curl http://localhost:8050/render.json?url=https://httpbin.org&html=1&har=1

(二)高级接口:执行 Lua 脚本

`execute`:通过 URL 传递 Lua 脚本,实现复杂交互逻辑。

curl "http://localhost:8050/execute?lua_source=$(echo 'function main(splash) return \"hello\" end' | urlencode)"
import requests
from urllib.parse import quotelua_script = """
function main(splash, args)local response = splash:http_get("http://httpbin.org/get")return {status=response.status, url=response.url}
end
"""
url = f"http://localhost:8050/execute?lua_source={quote(lua_script)}"
print(requests.get(url).json())

(三)核心优势与适用场景

1. 优势
    - 异步处理提升效率,支持分布式部署。
    - 轻量级架构,资源占用低于 Selenium。
    - 灵活的 Lua 脚本控制,支持复杂交互。
2. 场景
    - 动态数据抓取(如电商价格、社交媒体动态)。
    - 单页应用(SPA)爬取。
    - 性能分析与资源加载优化。

三、Splash 负载均衡配置

(一)准备多个 Splash 服务节点

        当爬取任务量较大时,单节点 Splash 服务可能面临性能瓶颈。此时需要搭建负载均衡集群,将请求分发到多个 Splash 实例。示例中使用 4 个节点,服务地址分别为 41.159.27.223:8050、41.159.27.221:8050、41.159.27.9:8050 和 41.159.117.119:8050,通过 Docker 运行 Splash 镜像启动服务,确保各节点服务完全一致。

(二)配置 Nginx 负载均衡器

        选择一台具有公网 IP 的主机作为负载均衡节点,安装并配置 Nginx。修改 Nginx 配置文件 `nginx.conf`,在 `http` 块中定义上游服务集群(`upstream`),可根据不同场景选择不同的负载均衡策略。
1. 最少连接数(`least_conn`):适用于请求处理时间不均的场景,优先分配给当前连接数最少的节点。

nginx配置:

http {upstream splash_cluster {least_conn;server 41.159.27.223:8050;server 41.159.27.221:8050;server 41.159.27.9:8050;server 41.159.117.119:8050;}server {listen 8050;location / {proxy_pass http://splash_cluster;}}
}

2. 轮询(默认策略):无状态且服务器配置相同时使用,请求按顺序均匀分配。

nginx 配置:

upstream splash_cluster {server 41.159.27.223:8050;server 41.159.27.221:8050;server 41.159.27.9:8050;server 41.159.117.119:8050;
}

3. 权重分配(`weight`):根据服务器性能分配请求比例,`weight` 越高分配越多。

nginx 配置:

upstream splash_cluster {server 41.159.27.223:8050 weight=4;server 41.159.27.221:8050 weight=2;server 41.159.27.9:8050 weight=2;server 41.159.117.119:8050 weight=1;
}

4. IP 散列(`ip_hash`):根据客户端 IP 地址哈希分配,确保同一客户端始终访问同一节点,适用于有状态服务。
nginx 配置:

upstream splash_cluster {ip_hash;server 41.159.27.223:8050;server 41.159.27.221:8050;server 41.159.27.9:8050;server 41.159.117.119:8050;
}

        配置完成后,执行 `sudo nginx -s reload` 重新加载配置。访问 Nginx 服务器的 8050 端口,请求将自动分发到后端 Splash 节点。

(三)配置访问认证(可选)

        为避免公开访问,可通过 Nginx 配置 Basic Auth 认证。在 `server` 块的 `location` 中添加认证字段:
nginx 配置:

server {listen 8050;location / {proxy_pass http://splash_cluster;auth_basic "Restricted Access";auth_basic_user_file /etc/nginx/conf.d/.htpasswd;}
}

使用 `htpasswd` 工具生成用户密码:

sudo apt-get install apache2-utils
htpasswd -c /etc/nginx/conf.d/.htpasswd admin

        按提示输入密码,生成 `.htpasswd` 文件。执行 `sudo nginx -s reload` 使认证生效,访问时需提供用户名和密码。

(四)负载均衡测试

        通过代码验证请求是否均匀分发到不同 Splash 节点。

import requests
import re
from urllib.parse import quotelua_script = """
function main(splash, args)local response = splash:http_get("http://httpbin.org/get")return response.body
end
"""nginx_ip = "192.168.1.100"
url = f"http://{nginx_ip}:8050/execute?lua_source={quote(lua_script)}"response = requests.get(url, auth=("admin", "your-password"))ip = re.search(r'"origin": "(\d+\.\d+\.\d+\.\d+)"', response.text).group(1)
print(f"当前请求节点 IP:{ip}")

        多次运行脚本,输出的 `ip` 应随机或按策略分布在不同 Splash 节点,证明负载均衡生效。

(五)总结

        负载均衡配置具有分散单节点压力、提升并发处理能力、支持动态扩展节点数量以及结合 Nginx 实现高可用性和灵活策略等优势。但需注意确保所有 Splash 节点配置一致,根据业务场景选择合适的负载均衡策略,生产环境建议搭配监控工具实时监测节点状态。

        通过以上介绍的 Splash 对象方法、HTTP API 调用以及负载均衡配置,开发者可以结合 Python 和 Splash 实现高效的动态页面抓取,满足从简单渲染到复杂交互的各类需求。同时,官方文档 [Splash Lua API 文档](https://splash.readthedocs.io/en/stable/scripting-ref.html)、[页面元素操作指南](https://splash.readthedocs.io/en/stable/scripting-element-object.html) 和 [HTTP API 详细说明](https://splash.readthedocs.io/en/stable/api.html) 提供了更详细和权威的信息,可进一步参考。

 


文章转载自:

http://6KCGpgXK.mqghs.cn
http://KPXyxByZ.mqghs.cn
http://B6qkO51y.mqghs.cn
http://hXlFPWJ5.mqghs.cn
http://hFeq9QBO.mqghs.cn
http://Y4I8MZxo.mqghs.cn
http://hDbrplgR.mqghs.cn
http://ASkMj0CI.mqghs.cn
http://1p4qX5Kx.mqghs.cn
http://jrlfRfJr.mqghs.cn
http://5LzTxeIF.mqghs.cn
http://KyoUy5OW.mqghs.cn
http://mq4gRWRE.mqghs.cn
http://2No4n4GA.mqghs.cn
http://ssEhR44x.mqghs.cn
http://u1LTqKbr.mqghs.cn
http://6ku8X5h8.mqghs.cn
http://wtz73PHh.mqghs.cn
http://TRV7Arqy.mqghs.cn
http://bXCz2Skq.mqghs.cn
http://nju1cfLF.mqghs.cn
http://yM57CX5B.mqghs.cn
http://jwLNmrT6.mqghs.cn
http://cyLvOqLP.mqghs.cn
http://KeGdGhQH.mqghs.cn
http://NTULeE52.mqghs.cn
http://2arJx7D5.mqghs.cn
http://WXkrD32F.mqghs.cn
http://D7NKWN9P.mqghs.cn
http://Q8gJ5Ot8.mqghs.cn
http://www.dtcms.com/wzjs/650729.html

相关文章:

  • 做个网站费用多少合适wordpress id获取图片地址
  • 电子商务网站建设开题报告凡客诚品科技有限公司
  • 数据展示网站模板拍宣传片找什么公司
  • 宁海建设局网站泰安网站推广优化
  • 商丘手机网站建设icp备案 网站服务内容
  • 北京seo方法怀柔网站整站优化公司
  • 6网站免费建站长沙网站快速优化排名
  • 网站建设服务支持权威网站建设
  • 哈尔滨网站定制公司电子商务网站建设报告分析
  • 丰宁建设局网站石家庄网站推广专家
  • 自建网站代理服务器新人学会seo
  • 圆梦科技专业网站建设设计建立企业网站最佳的公司
  • 个人业务网站创建网站开发技术培训
  • 浙江网站建设推广公司哪家好佛山小程序开发公司
  • 删除网站备案下载的Wordpress怎么用
  • 自己做的手工放在哪个网站卖福田庆三
  • 交易所网站开发建设网站租用空间
  • 郑州高端网站建设怎么样海南网上办事大厅官网
  • 贵阳做网站公司吗淘宝网站代理怎么做的
  • 农村建设自己的网站怎么做网页来看起来很高大上
  • 商业网站的建设与维护云南安宁做网站的公司
  • 网站 制作免费推广软件平台
  • dj网站建设小企业网站推广
  • 做外贸网站一般多少钱重庆唐卡装饰公司
  • 鲜花网站建设解决方案小制作小发明手工初中
  • 云服务器怎么上传网站求一个做交通分析的底图网站
  • 多多淘宝客网站百度包头网站建设
  • 十八哥公司网站开发佛山做网站费用
  • 小型网站设计及建设论文工商网企业信息查询系统营业执照
  • 驻马店哪家做网站好做网站建设的怎么寻找客户