Python爬虫(七):PySpider 一个强大的 Python 爬虫框架
1. PySpider 简介
PySpider 是由 binux 开发的一个强大的 Python 爬虫框架,具有 WebUI 管理界面,支持 分布式爬取、任务调度、数据存储等功能。
👉 适合场景:中小规模爬虫、需要可视化管理的项目、快速开发爬虫任务。
1.1 PySpider vs Scrapy
对比项 | PySpider | Scrapy |
---|---|---|
学习曲线 | 较低,适合新手 | 较陡峭,需要理解架构 |
WebUI | ✅ 自带可视化界面 | ❌ 无官方界面 |
分布式 | ✅ 支持 | ✅ 需配合 Scrapy-Redis |
灵活性 | 适合规则化爬取 | 适合复杂爬取逻辑 |
社区生态 | 较小 | 非常庞大 |
结论:
- 如果你想要 快速搭建爬虫 + 可视化监控,选 PySpider。
- 如果你需要 高度定制化 + 企业级爬虫,选 Scrapy。
2. PySpider 核心架构
PySpider 采用 分布式架构,主要包含以下组件:
- Scheduler(调度器):管理任务队列,分配爬取任务。
- Fetcher(下载器):负责 HTTP 请求和响应获取。
- Processor(处理器):解析网页,提取数据。
- Result Worker(结果处理器):存储数据到数据库。
- WebUI(管理界面):监控任务状态、调试爬虫。
3. 快速上手:编写第一个 PySpider 爬虫
3.1 安装 PySpider
pip install pyspider
3.2 启动 PySpider
pyspider
访问 http://localhost:5000
进入 WebUI。
3.3 编写爬虫(示例:爬取豆瓣电影 Top 250)
from pyspider.libs.base_handler import *class DoubanMovieHandler(BaseHandler):crawl_config = {'headers': {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.93 Safari/537.36'}}@every(minutes=24 * 60) # 每天执行一次def on_start(self):self.crawl('https://movie.douban.com/top250', callback=self.index_page)@config(age=10 * 24 * 60 * 60) # 数据有效期 10 天def index_page(self, response):for each in response.doc('a[href^="https://movie.douban.com/subject/"]').items():self.crawl(each.attr.href, callback=self.detail_page)# 翻页next_page = response.doc('.next a').attr.hrefif next_page:self.crawl(next_page, callback=self.index_page)def detail_page(self, response):return {"title": response.doc('h1 span').text(),"rating": response.doc('.rating_num').text(),"director": response.doc('#info span:contains("导演") + span a').text(),"url": response.url}
3.4 运行爬虫
- 在 WebUI 点击 Create 创建任务。
- 输入脚本,点击 Save。
- 点击 Run 运行爬虫。
4. PySpider 高级功能
4.1 数据存储(MySQL)
from pyspider.database.mysql.mysqldb import SQLclass DBHelper:def __init__(self):self.db = SQL(host='localhost', user='root', passwd='123456', db='douban')def save(self, data):self.db.insert('movies', **data)class DoubanMovieHandler(BaseHandler):def on_result(self, result):DBHelper().save(result)
4.2 代理 IP 和随机 User-Agent
crawl_config = {'proxy': 'http://proxy.example.com:8080','headers': {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.93 Safari/537.36'}
}
4.3 定时任务
@every(minutes=60) # 每小时执行一次
def on_start(self):self.crawl('https://example.com', callback=self.parse)
5. PySpider 常见问题
Q1:PySpider 适合大规模爬取吗?
- 适合中小规模(100万数据以内)。
- 如果数据量极大,建议使用 Scrapy + Redis 分布式方案。
Q2:如何突破反爬?
- 随机 User-Agent(如
fake_useragent
库)。 - 代理 IP(如
requests-rotating-proxy
)。 - 降低爬取频率(设置
crawl_config
的rate
)。
Q3:PySpider 支持 JavaScript 渲染吗?
- 原生不支持,但可以结合 PhantomJS 或 Splash:
self.crawl(url, callback=self.parse, fetch_type='js')
6. 总结
PySpider 优点
✅ WebUI 管理:可视化任务监控、调试。
✅ 简单易用:适合新手快速上手。
✅ 分布式支持:可扩展至多机爬取。
PySpider 缺点
❌ 灵活性较低:复杂爬取逻辑不如 Scrapy 方便。
❌ 社区较小:遇到问题可能需要自己解决。
适用场景
- 中小规模爬虫(如每日数据监控)。
- 需要 WebUI 管理的项目(如非技术人员参与)。
如果你想要 快速开发爬虫 + 可视化监控,PySpider 是一个不错的选择!🚀