Splash学习笔记

简介: Splash学习笔记

Splash动态数据抓取
最近学习爬虫过程中接触到了Splash,下面根据我所学的经历进行整理回放,相关的操作如下。期间遇到一些问题,本人自行解决了。

1.1 简介及安装
Splash是具有JavaScript渲染功能并带有HTTP API的轻量级浏览器,同时还对接了Python的网络引擎框架Twisted和QT库,让服务具有一步处理能力,以发挥webkit的并发能力。其实,Splash就是一个带有API接口的轻量级浏览器,使用它提供的API接口可以简单实现Ajax动态数据抓取。其实它与Selenium所实现的功能都是相同的,只不过实现的过程和原理有所不同。

Splash的安装是基于Docker应用容器引擎,Docker支持三大操作系统:Linux、MacOS和Windows。本人在MacOS环境下进行操作

# 启动Docker之后,输入如下命令,即可安装
root@liuxiaoweideAir liuxiaowei # docker run -d -p 8050:8050 scrapinghub/splash

image.png

# 在浏览器地址栏输入http://本机ip地址:8050即可打开splash 
# 我的本机地址:192.168.68.242,端口8050

image.png

1.2 使用Splash的API接口
Splash的最大好处是可以执行JavaScript代码,将Ajax动态数据直接加载到网页上,无需开发者花费时间和精力分析Ajax请求,从而实现相关数据的抓取。Python可以使用Splash提供的API接口,从而实现Python与Splash之间的交互。Splash提供多种API接口实现不同的功能。

1.2.1 render.html获取JS加载后的网页信息

# render.html获取JS加载后的网页信息
# 启动Pycharm,新建一个python文件,代码如下

import requests
headers = {
   
    'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36'
}
target_url = 'https://y.qq.com/portal/singer_list.html'    # 以QQ音乐为例
url = 'http://192.168.68.242:8050/render.html?url='+target_url+'&wait=5'

response = requests.get(url, headers=headers)
print(response.text)

image.png

1.2.2 render.png 获取网页截图

# render.png获取网页截图
import requests
headers = {
   
    'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36'
}

target_url = 'https://y.qq.com/n/ryqq/singer_list'  # 此处不能加.html否则不会显示正常的网页截图
# #render.png 获取网页截图
url = 'http://192.168.68.242:8050/render.png?url=' + target_url + '&width=500&height=500'
response = requests.get(url, headers=headers)
with open('image.png', 'wb') as f:
     f.write(response.content)

image.png

1.2.3 render.json返回请求数据

# render.json返回请求数据
import requests
headers = {
   
    'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36',
    'Cookie': 'pgv_pvid=3132771352; fqm_pvqid=880b3190-fa83-4efb-b454-91a8cfe5c88d; fqm_sessionid=d52acd91-a6e5-4724-b7d3-f640aa025aa9; pgv_info=ssid=s3303935717; ts_last=y.qq.com/n/ryqq/singer_list; ts_uid=5845062856; wxuin=1152921504679782202; psrf_qqopenid=; qqmusic_key=W_X_38mxV760na8eft79NlCqzAiOA-estYOQG-llR7bUbAUqZgKJXWhi-ZPtFoKHl9G0Snr-HfXYhO01O0; tmeLoginType=1; qm_keyst=W_X_38mxV760na8eft79NlCqzAiOA-estYOQG-llR7bUbAUqZgKJXWhi-ZPtFoKHl9G0Snr-HfXYhO01O0; psrf_qqunionid=; qm_keyst=W_X_38mxV760na8eft79NlCqzAiOA-estYOQG-llR7bUbAUqZgKJXWhi-ZPtFoKHl9G0Snr-HfXYhO01O0; euin=oK6kowEAoK4z7eClNKSFow-zoc**; wxopenid=opCFJwxfrEY9ZpgGrLGlFPdtA3I4; psrf_qqrefresh_token=; wxunionid=oqFLxslDReh71Tgsv2ag3if60zXM; psrf_qqaccess_token=; wxuin=1152921504679782202; wxrefresh_token=52_y1zSccbY7AxkZi958ZW7phLaZTtiNRgOyy5WbnCdYoedlU9Hn6xTTYPrWZO-lPuxFPyxX6E1t4uFGxKPkHMlAzXeXK_WS6tokw9DtYNZ9QY; login_type=2'
    }

target_url = 'https://y.qq.com/portal/singer_list.html'

# render.html 获取JS加载后的网页信息
url = 'http://192.168.68.242:8050/render.json?url='+target_url+'&wait=5'
response = requests.get(url, headers= headers)
print(response.text, )

image.png

1.2.4 execute执行Lua脚本

# execute执行Lua脚本
# 因为Splash 支持Lua脚本操作
# 获取cookies
import requests
from urllib.parse import quote
# Lua脚本
luaScript = '''
function main(splash)
    splash:go("https://y.qq.com/portal/singer_list")
    # 返回cookies
    return {
   
        splash:get_cookies()
    }
end
'''
# Lua脚本转码处理
url = 'http://192.168.68.242:8050/execute?lua_source= ' + quote(luaScript)
response = requests.get(url)
print(response.text)

image.png

从API接口的使用方法可以看到,爬取的网站是从Splash进行加载,然后再使用Requests模块对Splash发出请求,从而获取网站的网页内容。这里涉及到的API接口render.html和execute的使用频率相对较高, 特别是execute,能满足复杂点网站的多方面需求,编写Lua脚本获取网站的Cookies和设置请求头等操作。其实Splash的对象方法比较多,本人只练习了常用的对象方法。希望对您有所帮助!欢迎点赞转发。

相关文章
|
安全 网络安全 API
163邮箱IMAP服务器设置方法
```markdown 使用IMAP协议同步163邮箱:登录邮箱→设置→账户→IMAP/SMTP→开启服务→配置服务器(imap.163.com:993, SSL/TLS)→设置用户名和密码→保存并在邮件客户端添加账号。确保多设备邮件同步,定期更新设置。[≤240字符] ```
|
文件存储
easyrecovery激活码2022绿色永久使用
Ontrack EasyRecovery是一款非常出色的数据恢复软件,
13065 0
easyrecovery激活码2022绿色永久使用
|
PHP 开发工具 对象存储
PHP 使用 OSS上传文件
PHP 使用 OSS上传文件
5985 0
|
数据采集 JavaScript API
Splash的爬虫应用(一)
Splash的爬虫应用(一)
336 0
|
IDE 算法 Java
通义灵码企业级能力全面升级
本指南介绍如何使用通义灵码企业版提升代码质量和效率。首先,需注册并登录通义灵码企业版及 IDE 插件,下载本地工程和知识库压缩包,创建企业知识库并上传文档和代码。随后,可通过开启检索增强功能体验基于企业规范的代码风格优化、前端组件代码补全及后端算法函数生成等功能,显著提高开发效率和代码质量。
560 2
|
11月前
|
人工智能 JSON 自然语言处理
如何用大模型评估大模型——PAI-Judge裁判员大语言模型的实现简介
阿里云人工智能平台 PAI 推出 PAI-Judge 裁判员大模型,为用户构建符合应用场景的多维度、细粒度的评测体系,支持单模型评测和双模型竞技两种模式,允许用户自定义参数,实现准确、灵活、高效的模型自动化评测,为模型迭代优化提供数据支撑。 相比通用大模型尤其在回答确定性/数学类问题、角色扮演、创意文体写作、翻译等场景下,PAI-Judge 系列模型表现优异,可以直接用于大模型的评估与质检。
|
存储 Linux 图形学
深度探索Linux操作系统 —— Linux图形原理探讨1
深度探索Linux操作系统 —— Linux图形原理探讨
531 7
|
数据采集 缓存 负载均衡
实测 | 芝麻代理,快代理、熊猫代理、豌豆代理HTTP代理质量测试
哈喽大家,欢迎来到本期知识分享!我们将探讨HTTP代理的质量分析方法,无论新手还是资深用户都能从中受益。首先介绍了HTTP代理的基本概念及其重要性。接着,我们通过两个关键指标——响应时间和可用性来评估代理质量。响应时间可通过`curl`命令测试并计算平均值;可用性则需设置定时任务持续检测,比如使用Python脚本。最后,通过具体案例分析了几家知名代理供应商的表现,其中青果网络在各项指标上表现突出,是进行数据采集等活动的优质选择。记得选择最适合自己的代理服务哦!
实测 | 芝麻代理,快代理、熊猫代理、豌豆代理HTTP代理质量测试
|
存储 Java 计算机视觉
如何在Spring Boot中实现图像上传和处理
如何在Spring Boot中实现图像上传和处理
|
JavaScript 前端开发 数据可视化
ECharts 雷达图案例001-自定义节点动画
使用ECharts创建自定义雷达图,通过JavaScript动态更新高亮和交互反馈,增强用户体验。关键步骤包括:开启动画效果,数据更新时保持图表状态,鼠标悬浮时动态高亮指标,优化动画性能。案例展示了ECharts在数据可视化中的灵活性和表现力。[查看完整案例](https://download.csdn.net/download/No_Name_Cao_Ni_Mei/89454380)。
1131 0
 ECharts 雷达图案例001-自定义节点动画

热门文章

最新文章