在Synapse Analytics中用PySpark自动爬取网页并下载报告的方案咨询
在Synapse Analytics中用PySpark实现无本地依赖的网页爬取自动化
关于本地Chrome Driver的问题
如果在本地机器安装Chrome Driver并让Synapse脚本调用它,确实需要本地机器全程开机。因为Selenium需要直接连接本地运行的Chrome Driver进程,一旦本地关机,Driver进程终止,Synapse的爬取脚本就会报错无法执行。而且Synapse作为云端服务,默认无法直接访问本地的Driver资源,这种方案本身就不可行,更别提自动化了。
无需额外基础设施的实现方案
直接在Synapse的Spark池中配置依赖,让爬取逻辑完全在云端执行,不需要本地机器参与。具体步骤如下:
1. 在Synapse Spark池配置依赖
Synapse支持两种方式安装Selenium和Chrome相关组件:
方式一:使用Conda环境
在Synapse Studio中创建自定义Conda环境,添加以下包:selenium:Selenium核心库chromedriver-binary:对应版本的Chrome Driver
保存环境后,在提交PySpark作业时指定使用这个自定义环境。
方式二:使用Spark初始化脚本(Init Script)
编写一个bash脚本,在Spark池启动时自动安装Chrome浏览器和Driver:#!/bin/bash # 安装Chrome浏览器 apt-get update apt-get install -y chromium-browser # 下载对应版本的Chrome Driver CHROME_VERSION=$(chromium-browser --version | grep -oP 'Chromium \K[0-9]+') wget https://storage.googleapis.com/chrome-for-testing-public/$CHROME_VERSION.0/linux64/chromedriver-linux64.zip unzip chromedriver-linux64.zip mv chromedriver-linux64/chromedriver /usr/local/bin/ chmod +x /usr/local/bin/chromedriver将脚本上传到Synapse关联的ADLS存储,然后在Spark池的配置中指定这个初始化脚本,每次Spark池启动时会自动执行安装。
2. 编写无头模式的PySpark爬取脚本
使用Chrome的无头模式运行Selenium,不需要可视化界面,完全在云端执行。示例代码:
from selenium import webdriver from selenium.webdriver.chrome.options import Options from pyspark.sql import SparkSession spark = SparkSession.builder.appName("WebCrawler").getOrCreate() # 配置Chrome无头模式选项 chrome_options = Options() chrome_options.add_argument("--headless=new") # 新版无头模式 chrome_options.add_argument("--no-sandbox") # 禁用沙箱(必要的服务器端运行参数) chrome_options.add_argument("--disable-dev-shm-usage") # 解决内存不足问题 chrome_options.add_argument("--window-size=1920,1080") # 设置窗口尺寸,避免页面布局异常 # 初始化Driver driver = webdriver.Chrome(options=chrome_options) # 爬取逻辑示例 try: driver.get("目标报告页面URL") # 模拟点击下载按钮、等待文件下载完成等操作 # 将下载的报告上传到ADLS(Synapse可直接访问) finally: driver.quit() # 确保Driver关闭 spark.stop()
3. 配置自动化执行
在Synapse中使用**管道(Pipeline)**触发PySpark作业:
- 创建一个管道,添加"Spark作业"活动,指向你的爬取脚本
- 设置触发规则:可以是定时触发(比如每天凌晨)、事件触发(比如特定文件生成后)
- 管道会自动调用Synapse的Spark池执行作业,全程不需要本地机器参与
注意事项
- 确保Chrome Driver版本与安装的Chrome浏览器版本完全匹配,避免兼容性错误
- 爬取网站时需遵守robots协议和网站的使用条款,避免触发反爬机制
- 下载的报告直接保存到Synapse关联的ADLS存储中,方便后续分析处理
内容的提问来源于stack exchange,提问作者sparc
相关产品推荐
相关产品推荐

