PySpider 入门:从安装踩坑到爬取 Shopify 应用

Words 1960Read Time 5 min
2021-4-22
2026-2-11
cover
type
Post
status
Published
date
Apr 22, 2021 11:22
slug
summary
本文介绍 PySpider 这个自带 WebUI 的爬虫框架,适合快速搭建中小规模抓取任务。详解安装踩坑点(Python 3.6 兼容性、werkzeug 版本降级、PhantomJS 配置)与启动卡死问题(result_worker 双窗口启动法);对比 PySpider 与 Scrapy 在可视化调试、工程化、扩展性上的差异;以爬取 Shopify 应用列表为完整示例,展示从 on_start 生成任务、index_page 解析页面、到 on_result 调用自定义 MySQL 模块落库的完整数据流;提供建表 SQL、pymysql 封装脚本与 WebUI 任务监控要点。
tags
Python
Crawler
Scrapy
category
Crawler
icon
password
wordCount
2008

前言

PySpider 是一个自带 WebUI 的爬虫框架,集成了任务调度、抓取、脚本处理、结果存储等能力,适合快速搭建中小规模的抓取任务与数据采集原型。本文以“爬取 Shopify App 应用列表信息”为例,整理 PySpider 的核心概念、安装踩坑点、启动方式,以及完整示例代码与落库方案。
💡
适用场景
  • 需要快速验证抓取思路,并希望通过 WebUI 方便调试
  • 任务量中等,关注“可视化监控”和“快速开发”
  • 目标站点有一定的动态渲染需求(可配合 PhantomJS 或其他方案)

实验环境

  • Windows 10
  • Python 3.6.8
  • pip 19.2.3

什么是 PySpider

PySpider 是一套“任务调度 + 抓取 + 解析处理 + 结果保存”的一体化爬虫框架,最大特点是提供了 WebUI,可以在页面里编辑脚本、调试请求、查看任务进度与运行日志。

主要优点

  1. WebUI 友好:调试爬虫逻辑、查看响应与日志都很方便。
  1. 任务监控与项目管理:支持查看抓取进度、速率、错误情况,便于维护。
  1. 支持多种存储:可对接常见数据库或自定义结果处理。
  1. 支持抓取 JS 渲染页面:可通过 PhantomJS 等方式抓取动态页面。
  1. 可配置优先级与定时任务:适合周期性采集。

与 Scrapy 的简单对比

维度
PySpider
Scrapy
使用体验
更偏“可视化 + 快速上手”(自带 WebUI,调试与监控更直观)
更偏“工程化 + 可扩展”(项目结构清晰,适合长期维护)
动态渲染
常见方案是 PhantomJS
常见方案是 Splash、Playwright 等
选择器
内置 pyquery
常用 XPath、CSS 选择器、正则等
扩展性
一体化框架,扩展能力相对有限
生态更成熟,可通过 Downloader Middleware、Pipeline 等模块扩展,且模块解耦更好

总结

  • 想要快速实现页面抓取、并希望 WebUI 便于调试:推荐 PySpider
  • 面对强反爬、超大规模抓取、对可扩展性要求高:更推荐 Scrapy

PySpider 的基本架构与执行流程

PySpider 架构相对清晰,主要包含:
  • Scheduler(调度器):管理任务队列、去重、重试、分发任务。
  • Fetcher(抓取器):负责发起 HTTP 请求并拿到响应。
  • Processor(处理器):执行用户编写的脚本,解析页面、生成新任务、输出结果。
  • Result Worker(结果处理器):处理并保存结果(写入 DB、消息队列等)。
  • Monitor(监控器):监控任务运行状态与统计。
典型执行流程:
  1. on_start() 生成初始抓取任务,交给 Scheduler。
  1. Scheduler 分发任务给 Fetcher。
  1. Fetcher 请求页面并返回响应,交给 Processor。
  1. Processor 解析响应:
      • 抽取数据并返回 result
      • 抽取 URL 生成新任务并回传 Scheduler
  1. Scheduler 根据去重/重试策略继续调度,周而复始直到任务完成。

PySpider 安装

1)创建虚拟环境(建议固定 Python 3.6)

作者使用 Anaconda。
常用命令:
  • 创建环境:conda create -n pys python=3.6
  • 删除环境:conda remove -n pys --all
  • 进入环境:conda activate pys
  • 退出环境:conda deactivate
⚠️
关于 Python 3.7+ 的兼容问题
有些 PySpider 版本在 Python 3.7+ 下会因为关键字(如 async)等兼容问题报错。
如果必须使用更高版本 Python,需要按报错提示修改源码或选择维护更好的替代方案。

2)安装 PySpider

3)安装 PhantomJS(用于抓取部分 JS 渲染页面)

下载对应系统的安装包,解压后将 bin 目录下的 phantomjs.exe 放到当前环境的 pyspider 包目录下(或配置到 PATH)。
下载PHantomJS
下载PHantomJS
下载PHantomJS

4)调整 werkzeug 版本

有的环境会遇到 DispatcherMiddleware 缺失的问题,需要降低 werkzeug 版本。

PySpider 启动

进入虚拟环境后启动:
如果卡在 result_worker starting… 不动,常见原因是防火墙或网络策略导致。
可尝试:
  1. 打开一个 CMD 窗口启动 pyspider,等待约 10 秒。
  1. 保持第一个窗口不关,再打开第二个 CMD 窗口启动 pyspider
  1. 第二个窗口正常启动后,可关闭第一个窗口。
启动成功后,在浏览器访问:http://localhost:5000

WebUI 界面与状态说明

界面介绍
常见概念:
  • 定时任务(Schedule):周期触发的任务。
  • 组(Group):用于对爬虫项目分组管理。
  • 任务状态
    • TODO:尚未运行或等待执行。
    • STOP:停止运行。
    • CHECKING:修改项目后会短暂进入校验状态。
    • DEBUG / RUNNING:运行状态(首次可用 DEBUG 试跑,再切 RUNNING)。
  • rate / burst:抓取速率控制。
    • rate 表示单位时间请求数。
    • burst 表示短时间内允许的突发请求数量。
  • avg time:平均处理耗时。
  • progress:不同时间窗口内的请求统计。

示例:爬取 Shopify App 应用列表

本文目标:抓取 Shopify 应用市场列表页的应用信息。

1)目标网址

目标网址

2)新建爬虫项目

目标网址

3)编写爬虫脚本

将下面代码复制到右侧编辑栏(可根据页面结构调整选择器):
点击 SaveRun 后,可能会看到大量 follow(例如 202 条),这是因为代码里从第 1 页爬到第 202 页。
  • 想单独测试某个 URL:点每条 follow 的箭头。
  • 想一次性执行全量:在首页直接运行该爬虫。
notion image

4) 保存数据到 MySQL

1)创建表

安装 MySQL 并创建表 shopify

2)编写 mysql.py

创建文件 mysql.py,放到当前环境的 pyspider 包目录下(或你的项目可引用位置)。
爬虫中 return 的结果会触发 on_result(),在其中调用该文件把数据写入 MySQL。
🔒
上面的示例包含数据库账号密码,请在实际发布文章时把敏感信息替换为占位符,或改用环境变量读取。
mysql

5)执行爬虫

回到首页,将爬虫状态设为 RUNNING,然后点击运行。
执行爬虫
执行完成后,可以在 UI 里看到 process 统计数据(示例里 all 显示为 204,其中可能包含少量测试请求)。

常见问题(可选)

  • 卡在 result_worker starting…:优先检查防火墙、端口占用、网络策略。
  • 选择器匹配不到数据:打开浏览器开发者工具确认 class 是否变化,必要时更换 CSS 选择器或改用 XPath。
  • 被封或触发反爬:降低速率(rate/burst),增加随机等待,补充 headers、代理等策略。
 
Loading...