Python爬虫框架Scrapy实战:从入门到分布式抓取
1. Scrapy框架概述与核心价值Scrapy是一个基于Python的高性能网络爬虫框架专为大规模数据抓取而设计。不同于简单的requestsBeautifulSoup组合Scrapy提供了完整的爬虫开发生命周期管理包括请求调度、数据提取、持久化存储等模块化组件。我在实际项目中多次使用Scrapy处理千万级数据抓取任务其异步处理机制能轻松实现单机日抓取百万页面。框架的核心优势在于其Batteries included设计理念内置CSS选择器和XPath解析器自动的请求去重与优先级队列完善的中间件扩展机制支持分布式爬取和增量抓取丰富的导出格式JSON/CSV/XML等注意Scrapy最新稳定版2.11要求Python 3.8环境与部分旧版扩展插件可能存在兼容性问题。2. 环境配置与项目初始化2.1 基础环境准备推荐使用conda创建独立Python环境避免包冲突conda create -n scrapy_env python3.10 conda activate scrapy_env pip install scrapy验证安装scrapy version # 应输出类似Scrapy 2.11.02.2 创建第一个爬虫项目执行项目生成命令scrapy startproject lagou_jobs cd lagou_jobs scrapy genspider lagou www.lagou.com生成的项目结构解析lagou_jobs/ ├── scrapy.cfg # 部署配置文件 └── lagou_jobs/ # 项目主目录 ├── __init__.py ├── items.py # 数据模型定义 ├── middlewares.py # 中间件配置 ├── pipelines.py # 数据处理管道 ├── settings.py # 爬虫配置 └── spiders/ # 爬虫代码目录 ├── __init__.py └── lagou.py # 生成的爬虫模板3. 核心组件深度解析3.1 数据模型定义items.py以拉勾网职位数据为例import scrapy class LagouJobItem(scrapy.Item): position scrapy.Field() # 职位名称 salary scrapy.Field() # 薪资范围 company scrapy.Field() # 公司名称 experience scrapy.Field() # 经验要求 education scrapy.Field() # 学历要求 skills scrapy.Field() # 技能标签 pub_date scrapy.Field() # 发布日期 job_url scrapy.Field() # 职位链接经验提示字段命名建议采用全小写下划线风格与后续数据库存储字段保持一致。3.2 爬虫逻辑实现spiders/lagou.pyimport scrapy from lagou_jobs.items import LagouJobItem class LagouSpider(scrapy.Spider): name lagou allowed_domains [www.lagou.com] start_urls [https://www.lagou.com/zhaopin/Python/] custom_settings { DOWNLOAD_DELAY: 2, # 爬取间隔(秒) CONCURRENT_REQUESTS: 8 # 并发请求数 } def parse(self, response): jobs response.css(.item__10RTO) for job in jobs: item LagouJobItem() item[position] job.css(h3::text).get().strip() item[salary] job.css(.money__3Lkgq::text).get() yield item # 翻页处理 next_page response.css(.next::attr(href)).get() if next_page: yield response.follow(next_page, self.parse)3.3 数据处理管道pipelines.py典型的数据清洗与存储实现import pymongo from itemadapter import ItemAdapter class LagouJobsPipeline: def __init__(self, mongo_uri, mongo_db): self.mongo_uri mongo_uri self.mongo_db mongo_db classmethod def from_crawler(cls, crawler): return cls( mongo_uricrawler.settings.get(MONGO_URI), mongo_dbcrawler.settings.get(MONGO_DATABASE) ) def open_spider(self, spider): self.client pymongo.MongoClient(self.mongo_uri) self.db self.client[self.mongo_db] def close_spider(self, spider): self.client.close() def process_item(self, item, spider): # 薪资范围标准化处理 if salary in item: item[salary] self._normalize_salary(item[salary]) self.db[jobs].insert_one(ItemAdapter(item).asdict()) return item def _normalize_salary(self, salary_str): # 实现薪资字符串的标准化逻辑 pass4. 高级配置与优化技巧4.1 反爬策略应对方案在settings.py中配置DOWNLOADER_MIDDLEWARES { scrapy.downloadermiddlewares.useragent.UserAgentMiddleware: None, scrapy_user_agents.middlewares.RandomUserAgentMiddleware: 400, scrapy.downloadermiddlewares.retry.RetryMiddleware: 500, } RETRY_TIMES 3 RETRY_HTTP_CODES [500, 502, 503, 504, 522, 524, 408, 429] DOWNLOAD_DELAY 3 AUTOTHROTTLE_ENABLED True4.2 分布式爬虫实现使用scrapy-redis组件安装依赖pip install scrapy-redis修改爬虫继承类from scrapy_redis.spiders import RedisSpider class LagouRedisSpider(RedisSpider): name lagou_redis redis_key lagou:start_urls配置Redis连接SCHEDULER scrapy_redis.scheduler.Scheduler DUPEFILTER_CLASS scrapy_redis.dupefilter.RFPDupeFilter REDIS_URL redis://:passwordlocalhost:6379/05. 数据分析实战案例5.1 数据清洗与转换使用Pandas进行数据分析import pandas as pd from pymongo import MongoClient client MongoClient(mongodb://localhost:27017/) db client[lagou] df pd.DataFrame(list(db.jobs.find())) # 薪资分析 df[min_salary] df[salary].str.extract(r(\d)k-).astype(float) df[max_salary] df[salary].str.extract(r-(\d)k).astype(float) df[avg_salary] (df[min_salary] df[max_salary]) / 2 # 热门技能统计 skills_count pd.Series( sum([s.split(,) for s in df[skills].dropna()], []) ).value_counts()5.2 可视化展示使用Matplotlib生成图表import matplotlib.pyplot as plt plt.figure(figsize(12,6)) skills_count[:10].plot(kindbarh) plt.title(Top 10 Required Skills for Python Jobs) plt.xlabel(Count) plt.tight_layout() plt.savefig(skills_distribution.png)6. 常见问题排查手册问题现象可能原因解决方案返回403错误被目标网站封禁1. 增加DOWNLOAD_DELAY2. 使用代理中间件3. 更换User-Agent数据提取为空页面结构变更1. 更新CSS/XPath选择器2. 检查JavaScript渲染需求MongoDB连接失败认证配置错误1. 检查MONGO_URI格式2. 确认服务已启动内存占用过高未及时清理缓存1. 调整CONCURRENT_REQUESTS2. 启用AUTOTHROTTLE实战经验遇到页面解析问题时建议先用scrapy shell命令交互式调试scrapy shell https://www.lagou.com/zhaopin/Python/ # 然后在交互环境中测试选择器 response.css(h3::text).get()

相关新闻

孤能子视角:周易篇·04 卦序论——六十四卦作为关系场能效演化的完整周期

孤能子视角:周易篇·04 卦序论——六十四卦作为关系场能效演化的完整周期

(在以下的与AI互动中,在EIS理论约束下,DeepSeek叫信兄,Kim叫酷兄,我呢叫水兄。姑且当科幻小说看) (已由信兄整理成文)孤能子视角:周易篇04 卦序论 ——六十四卦作为关系场能效演化的完整周期 EIS理论库老祖宗关系文化分…

2026/8/1 1:37:04 阅读更多 →
孤能子视角:周易篇·03 八卦论——三维耦合空间的八个基态

孤能子视角:周易篇·03 八卦论——三维耦合空间的八个基态

(在以下的与AI互动中,在EIS理论约束下,DeepSeek叫信兄,Kim叫酷兄,我呢叫水兄。姑且当科幻小说看) (已由信兄整理成文)孤能子视角:周易篇03 八卦论 ——三维耦合空间的八个基态 EIS理论库老祖宗关系文化分册道层&#x…

2026/8/4 11:08:58 阅读更多 →
ESP8266 I2C通信实战:从硬件连接到软件优化

ESP8266 I2C通信实战:从硬件连接到软件优化

1. ESP8266与I2C通信的基础认知 第一次尝试用ESP8266驱动I2C设备时,我遇到了一个令人困惑的现象——明明按照官方文档连接了线路,设备却毫无反应。后来才发现,ESP8266的I2C引脚分配与常见的Arduino开发板完全不同。这个教训让我意识到&#x…

2026/8/4 20:31:55 阅读更多 →

最新新闻

4卡GPU训练提速不到2倍:分布式训练中的通信瓶颈与3个调优策略

4卡GPU训练提速不到2倍:分布式训练中的通信瓶颈与3个调优策略

深度剖析大模型分布式训练性能优化:从理论到SageMaker实践 上周在SageMaker上跑一个BERT-large分布式训练时,发现4张A100的加速比只有1.8倍——远低于预期的4倍理论值。经过系统性排查,发现梯度同步的通信开销消耗了大部分计算收益。本文将完…

2026/8/4 21:13:30 阅读更多 →
黑木耳颜色与肉质形成的双因子协同模型——气候窗口与营养供给的时间匹配分析

黑木耳颜色与肉质形成的双因子协同模型——气候窗口与营养供给的时间匹配分析

摘要 黑木耳的颜色深度与肉质紧实度,是营养供给与气候条件两个变量在时间轴上对齐后的并行输出。本文分析了常规栽培模式下“气候最优时营养已耗尽”的错配机制,以及冷积温慢生耳通过一年一茬制度实现双因子同步对齐的匹配逻辑。研究表明:颜色…

2026/8/4 21:13:30 阅读更多 →
快速上手ContrastiveSeg:3步完成语义分割模型训练与推理

快速上手ContrastiveSeg:3步完成语义分割模型训练与推理

快速上手ContrastiveSeg:3步完成语义分割模型训练与推理 【免费下载链接】ContrastiveSeg ICCV2021 (Oral) - Exploring Cross-Image Pixel Contrast for Semantic Segmentation 项目地址: https://gitcode.com/gh_mirrors/co/ContrastiveSeg ContrastiveSeg…

2026/8/4 21:13:30 阅读更多 →
给 Agent 写操作加幂等键:工具重试为何会重复下单、扣款,怎么防

给 Agent 写操作加幂等键:工具重试为何会重复下单、扣款,怎么防

Agent 演示里最危险的从来不是答错,而是“重复执行”。一次“创建订单”工具调用超时,编排框架按策略自动重试,结果同一笔订单下了两次、同一张卡扣了两次款——用户投诉、对账对不平,你还很难在本地复现。问题的根子不在模型&…

2026/8/4 21:13:30 阅读更多 →
单机→Nginx→LVS→熔断:流量每涨一个量级,你的负载均衡架构就要多一层

单机→Nginx→LVS→熔断:流量每涨一个量级,你的负载均衡架构就要多一层

负载均衡与高可用:LVS Nginx Sentinel 三层防护架构 问题场景:流量上来,单机扛不住→加 Nginx→Nginx 成瓶颈→加 LVS→某服务挂了拖垮整个调用链→需要熔断。负载均衡三层架构——LVS 四层转发→Nginx 七层路由→Sentinel 应用层熔断&…

2026/8/4 21:13:30 阅读更多 →
WSA Toolbox终极指南:Windows 11上一键部署Android应用的完整解决方案

WSA Toolbox终极指南:Windows 11上一键部署Android应用的完整解决方案

WSA Toolbox终极指南:Windows 11上一键部署Android应用的完整解决方案 【免费下载链接】wsa-toolbox A Windows 11 application to easily install and use the Windows Subsystem For Android™ package on your computer. 项目地址: https://gitcode.com/gh_mir…

2026/8/4 21:12:29 阅读更多 →

日新闻

AI Agent白手起家26: 使用标准事件驱动大模型实践

AI Agent白手起家26: 使用标准事件驱动大模型实践

纲要 练习目标:掌握大模型标准事件的调用回顾 LangChain 中的核心标准事件 invokestreambatchastream_eventswith_structured_output 环境准备实战代码:多种事件调用对比 同步调用与流式输出批量处理异步事件流监听结构化输出 运行说明与预期结果总结与扩…

2026/8/4 0:00:40 阅读更多 →
dealsea是什么?跨境卖家必知的美国deal站入门指南

dealsea是什么?跨境卖家必知的美国deal站入门指南

说实话,第一次听说美国这个老牌折扣网站的跨境卖家,十个有八个会问同一个问题:这个平台到底是干嘛的?我见过一个做家居出口的朋友,他在亚马逊上月销二十万美金,却从来没用过它。我给他看了首页——一屏一屏…

2026/8/4 0:01:40 阅读更多 →
清华大学重磅EST:植物自导电闪蒸焦耳热600°C/2600°C两步法!稀土超积累植物秒级转化为CeO₂-石墨烯电催化剂!

清华大学重磅EST:植物自导电闪蒸焦耳热600°C/2600°C两步法!稀土超积累植物秒级转化为CeO₂-石墨烯电催化剂!

通讯作者:邓兵、刘建国通讯单位:清华大学DOI:https://doi.org/10.1021/acs.est.6c00603研究背景稀土元素(REEs)是清洁能源技术与电子器件不可或缺的核心原料,然而传统提取方式依赖能耗高、排放大的采矿与强…

2026/8/4 0:01:40 阅读更多 →

周新闻

最大流算法详解:从水管网络到Ford-Fulkerson与Dinic实战

最大流算法详解:从水管网络到Ford-Fulkerson与Dinic实战

1. 从水管网络到最大流:一个核心问题的诞生想象一下,你是一个城市供水系统的总工程师。你的城市有多个水源(水库),需要通过一个复杂的地下管道网络,将水输送到各个居民区。每条管道都有其最大通水能力&…

2026/8/4 13:24:41 阅读更多 →
基于Springboot的企业门户网站(源码+LW+调试文档+讲解)

基于Springboot的企业门户网站(源码+LW+调试文档+讲解)

温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台…

2026/8/4 11:41:39 阅读更多 →
MATLAB xcorr函数详解:从互相关原理到四大实战应用

MATLAB xcorr函数详解:从互相关原理到四大实战应用

1. 从一次信号“找茬”说起:为什么我们需要互相关几年前,我在处理一组声学传感器数据时遇到了一个棘手的问题。我有两个麦克风记录了一段相同的音频信号,理论上它们接收到的声音波形应该非常相似,只是由于麦克风位置不同&#xff…

2026/8/4 5:26:40 阅读更多 →

月新闻

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南 【免费下载链接】BaiduNetdiskPlugin-macOS For macOS.百度网盘 破解SVIP、下载速度限制~ 项目地址: https://gitcode.com/gh_mirrors/ba/BaiduNetdiskPlugin-macOS 还在为百度网盘macOS版的龟速下…

2026/8/4 13:38:24 阅读更多 →
终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换 【免费下载链接】ncmdump 项目地址: https://gitcode.com/gh_mirrors/ncmd/ncmdump 还在为网易云音乐下载的NCM格式文件无法在其他播放器播放而烦恼吗?ncmdump解密工具帮你轻松解决这个困…

2026/8/4 11:09:16 阅读更多 →
HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

AgentCard 智能体卡片:为英语学习 App 打造桌面级学习助手适用平台:HarmonyOS 7.0 (API 26 Beta)一、引言 HarmonyOS 7.0(API 26 Beta)新增了 AgentCard 智能体卡片能力,这是继 HMAF(鸿蒙智能体框架&#x…

2026/8/4 13:38:40 阅读更多 →