Splash的爬虫应用(一)

简介: Splash的爬虫应用(一)

Splash的爬虫应用
Splash是一个JavaScript渲染服务,它是一个带有HTTP API的轻型Web浏览器。Python可以通过HTTP API调用Splash中的一些方法实现对页面的渲染工作,同时它还可以使用Lua语言实现页面的渲染,所以使用Splash同样可以实现动态渲染页面的爬取。其实它与selenium所实现的功能都相同的,只不过实现的过程和原理有所不同。

搭建Splash环境(Mac系统)
搭建Splash环境需要docker命令进行安装,所以要先安装Docker,然后通过Docker 命令安装Splash,再启动Splash服务,才可以正常使用Splash。搭建Splash环境的具体步骤如下:

1、安装Docker
在浏览器中打开Docker的官网地址(https://www.docker.com/),注册并登录账号,然后根据自己需求下载对应系统版本的Docker,本人电脑系统是macOS,如下图:
image.png

所以登录官网下载。如下图:
image.png

下载之后,正常安装即可。

或许第二种方法,进入mac命令行,但不是root身份,用brew install 安装也可以。

Last login: Thu Feb 10 15:59:45 on ttys000
liuxiaowei@MacBookAir ~ % brew install docker

说 明

第二种方法的前提需要先安装brew,这里不再赘述,仅供参考。

2、安装及启动Splash
安装和启动Splash非常简单,直接执行如下命令:

# 启动Docker后
MacBookAir:~ root#  docker run -d -p 8050:8050 scrapinghub/splash

image.png

服务启动成功以后,在浏览器中输入"http://localhost:8050",本人利用的是selenium自动启动Splash服务。代码如下:

#_*_coding:utf-8_*_
# 作者      :liuxiaowei
# 创建时间   :2/10/22 4:32 PM
# 文件      :使用selenium启动Splash服务.py
# IDE      :PyCharm

# 导入模块
from selenium import webdriver
import time

# 指定url
url = 'http://localhost:8050/'
# 设定driver路径
execute_path = '../使用selenium爬取动态加载的信息/chromedriver'
# 创建browser
browser = webdriver.Chrome(executable_path=execute_path)
# 打开splash测试页面
browser.get(url)

time.sleep(10)
browser.quit()

程序运行结果如下:
image.png

在Splash测试页面中,右侧的代码是默认生成的Lua脚本,就像所有编程语言中的"Hello World"一样。接下来可以在右侧上方的输入框内输入一个网址,本例使用百度网址(https://www.baidu.com)为例,然后单击render me!按钮。将显示结果,如下图:
image.png

**注 意:**本人用的是selenium修改Splash测试页的输入框缺省值,修改为百度网页。同样得到如上图结果,代码如下:

#_*_coding:utf-8_*_
# 作者      :liuxiaowei
# 创建时间   :2/10/22 4:32 PM
# 文件      :使用selenium启动Splash服务.py
# IDE      :PyCharm

# 导入模块
from selenium import webdriver
from selenium.webdriver.common.by import By
# 导入显式等待模块
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
import time

# 指定url
url = 'http://localhost:8050/'
# 设定driver路径
execute_path = '../使用selenium爬取动态加载的信息/chromedriver'
# 创建browser
browser = webdriver.Chrome(executable_path=execute_path)
# 打开splash测试页面
browser.get(url)

# 找到splash测试页面的input框和render按钮
inputTag = browser.find_element_by_xpath('//input[@name="url"]')
render_Btn = browser.find_element_by_xpath('//button[@type="submit"]')

# 最关键是如下修改输入框属性值,我查了很多资料才搞定,也稍有点成就感
# 就是利用下面的脚本"argugments[0].value='https://www.baidu.com';"
# 因为Splash测试页的输入框的缺省值是http://google.com/,不能用send_key赋值,只能修改

browser.execute_script("arguments[0].value='https://www.baidu.com';", inputTag)
render_Btn.click()

# 下面利用显示等待实现网页彻底刷新
try:
    element = WebDriverWait(browser, 10).until(EC.presence_of_element_located((By.title, '百度一下,你就知道'))
    )
finally:
    browser.quit()

说 明:上图的内容是通过Lua代码生成的,其中包含渲染截图、HAR加载统计数据、网页源代码。

注 意:

如果电脑 关机或重启后,再次使用Splash时需要重新执行“docker run -p 8050:8050 scrapinghub/splsh“命令启动Splash服务。

接下文: Splash的爬虫应用(二)https://developer.aliyun.com/article/1617945

相关文章
|
8月前
|
数据采集 Java API
深度解析:爬虫技术获取淘宝商品详情并封装为API的全流程应用
本文探讨了如何利用爬虫技术获取淘宝商品详情并封装为API。首先介绍了爬虫的核心原理与工具,包括Python的Requests、BeautifulSoup和Scrapy等库。接着通过实战案例展示了如何分析淘宝商品页面结构、编写爬虫代码以及突破反爬虫策略。随后讲解了如何使用Flask框架将数据封装为API,并部署到服务器供外部访问。最后强调了在开发过程中需遵守法律与道德规范,确保数据使用的合法性和正当性。
|
6月前
|
数据采集 存储 数据可视化
Python网络爬虫在环境保护中的应用:污染源监测数据抓取与分析
在环保领域,数据是决策基础,但分散在多个平台,获取困难。Python网络爬虫技术灵活高效,可自动化抓取空气质量、水质、污染源等数据,实现多平台整合、实时更新、结构化存储与异常预警。本文详解爬虫实战应用,涵盖技术选型、代码实现、反爬策略与数据分析,助力环保数据高效利用。
369 0
|
7月前
|
数据采集 API 调度
Python爬虫框架对比:Scrapy vs Requests在API调用中的应用
本文对比了 Python 中 Scrapy 与 Requests 两大爬虫框架在 API 调用中的差异,涵盖架构设计、调用模式、性能优化及适用场景,并提供实战建议,助力开发者根据项目需求选择合适工具。
|
数据采集 存储 JSON
Python网络爬虫:Scrapy框架的实战应用与技巧分享
【10月更文挑战第27天】本文介绍了Python网络爬虫Scrapy框架的实战应用与技巧。首先讲解了如何创建Scrapy项目、定义爬虫、处理JSON响应、设置User-Agent和代理,以及存储爬取的数据。通过具体示例,帮助读者掌握Scrapy的核心功能和使用方法,提升数据采集效率。
607 6
|
10月前
|
数据采集 XML 存储
Headers池技术在Python爬虫反反爬中的应用
Headers池技术在Python爬虫反反爬中的应用
|
数据采集 JavaScript 前端开发
异步请求在TypeScript网络爬虫中的应用
异步请求在TypeScript网络爬虫中的应用
|
数据采集 前端开发 中间件
Python网络爬虫:Scrapy框架的实战应用与技巧分享
【10月更文挑战第26天】Python是一种强大的编程语言,在数据抓取和网络爬虫领域应用广泛。Scrapy作为高效灵活的爬虫框架,为开发者提供了强大的工具集。本文通过实战案例,详细解析Scrapy框架的应用与技巧,并附上示例代码。文章介绍了Scrapy的基本概念、创建项目、编写简单爬虫、高级特性和技巧等内容。
637 4
|
数据采集 中间件 API
在Scrapy爬虫中应用Crawlera进行反爬虫策略
在Scrapy爬虫中应用Crawlera进行反爬虫策略
|
数据采集 JavaScript 前端开发
Splash的爬虫应用(二)
Splash的爬虫应用(二)
198 0
Splash的爬虫应用(二)
|
10月前
|
数据采集 测试技术 C++
无headers爬虫 vs 带headers爬虫:Python性能对比
无headers爬虫 vs 带headers爬虫:Python性能对比