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

网站内的新闻怎样做链接宁波seo外包优化

网站内的新闻怎样做链接,宁波seo外包优化,wordpress暴力破解密码,群晖wordpress无法修改端口目录 前言 一、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://www.dtcms.com/wzjs/511432.html

相关文章:

  • 电子商务的网站设计刷评论网站推广
  • 企业网站建设亮点兰州seo
  • 有经验的永州网站建设湖北网络营销网站
  • qq自助下单平台网站东莞seo外包公司
  • 用织梦系统做网站网址推广
  • 上海网站开发与设小程序源码网
  • 县网站建设方案网络营销推广的特点
  • 网站项目如何做需求分析全网热度指数
  • 网站搭建博客百度推广效果怎么样
  • 展示型网站和官网今天刚刚发生的新闻事故
  • 小程序开发平台哪里做得好嘉兴seo外包平台
  • 网站极简设计网站建设公司排行榜
  • 小程序模板页百度seo快速排名优化软件
  • 培训网站源码wordpress项目推广
  • 百度做网站搜索靠前关键词推广和定向推广
  • 门户网站平台建设方案加强网络暴力治理
  • visual studio 2010 网站开发seo服务是什么
  • 石家庄快速建站公司域名批量注册查询
  • 亚马逊建站服务b站视频推广app
  • 免费注册个人个人网站我要学电脑哪里有短期培训班
  • 江苏省住房和建设厅网站首页武汉seo网站推广培训
  • 镇江网站制作游戏推广员怎么做
  • 装修设计师在哪里找百度seo优化排名
  • 武汉模板建站定制网站合肥网站建设优化
  • 视频网站信息资源建设东莞海外网络推广
  • 做棋牌开发的网站网站seo推广排名
  • 做互联网的网站市场营销渠道
  • 帮人家做网站行业关键词搜索量排名
  • 程序员 做网站 微信公众号 赚钱广州seo顾问
  • 网站验证码是如何做的最近一周的新闻