Python爬虫(七):PySpider 一个强大的 Python 爬虫框架

发布于:2025-06-20 ⋅ 阅读:(24) ⋅ 点赞:(0)

1. PySpider 简介

PySpider 是由 binux 开发的一个强大的 Python 爬虫框架,具有 WebUI 管理界面,支持 分布式爬取任务调度数据存储等功能。
👉 适合场景:中小规模爬虫、需要可视化管理的项目、快速开发爬虫任务。

1.1 PySpider vs Scrapy

对比项 PySpider Scrapy
学习曲线 较低,适合新手 较陡峭,需要理解架构
WebUI ✅ 自带可视化界面 ❌ 无官方界面
分布式 ✅ 支持 ✅ 需配合 Scrapy-Redis
灵活性 适合规则化爬取 适合复杂爬取逻辑
社区生态 较小 非常庞大

结论

  • 如果你想要 快速搭建爬虫 + 可视化监控,选 PySpider
  • 如果你需要 高度定制化 + 企业级爬虫,选 Scrapy

2. PySpider 核心架构

PySpider 采用 分布式架构,主要包含以下组件:

  1. Scheduler(调度器):管理任务队列,分配爬取任务。
  2. Fetcher(下载器):负责 HTTP 请求和响应获取。
  3. Processor(处理器):解析网页,提取数据。
  4. Result Worker(结果处理器):存储数据到数据库。
  5. WebUI(管理界面):监控任务状态、调试爬虫。
任务管理
分发任务
返回响应
提取数据
存储数据
WebUI
Scheduler
Fetcher
Processor
Result Worker
Database

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.href
        if 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 运行爬虫

  1. 在 WebUI 点击 Create 创建任务。
  2. 输入脚本,点击 Save
  3. 点击 Run 运行爬虫。

4. PySpider 高级功能

4.1 数据存储(MySQL)

from pyspider.database.mysql.mysqldb import SQL

class 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_configrate)。

Q3:PySpider 支持 JavaScript 渲染吗?

  • 原生不支持,但可以结合 PhantomJSSplash
    self.crawl(url, callback=self.parse, fetch_type='js')
    

6. 总结

PySpider 优点

WebUI 管理:可视化任务监控、调试。
简单易用:适合新手快速上手。
分布式支持:可扩展至多机爬取。

PySpider 缺点

灵活性较低:复杂爬取逻辑不如 Scrapy 方便。
社区较小:遇到问题可能需要自己解决。

适用场景

  • 中小规模爬虫(如每日数据监控)。
  • 需要 WebUI 管理的项目(如非技术人员参与)。

如果你想要 快速开发爬虫 + 可视化监控,PySpider 是一个不错的选择!🚀


网站公告

今日签到

点亮在社区的每一天
去签到