公司动态

Scrapy 网络爬虫框架

📅 2026/8/14 9:57:54
Scrapy 网络爬虫框架
Scrapy 是Python 开发的开源、异步网页爬虫框架专门用于批量抓取网页数据自带请求调度、下载、解析、数据持久化、反爬基础处理不用手写大量请求、队列逻辑适合大规模爬虫项目。1. 核心五大组件架构组件作用Spider爬虫写解析逻辑定义爬取规则、url提取需要的数据Item数据容器定义要抓取的数据字段类似数据模型规范输出格式Item Pipeline管道拿到解析后的数据做保存存 json/csv、存数据库、清洗过滤数据Downloader下载器负责发送 http 请求下载网页源码处理请求头、代理、重试Scheduler调度器管理待爬取 url 队列去重、调度请求顺序实现异步并发中间件Downloader Middleware处理请求 / 响应设置代理、Cookie、UA、处理异常Spider Middleware处理 spider 输出的数据、请求2. 安装pip install scrapy3. 基础命令# 创建爬虫项目scrapy startproject myspider#进入项目文件夹cd myspider#生成爬虫文件 爬虫名 爬取域名scrapy genspider demo_spider example.com#运行爬虫scrapy crawl demo_spider#导出数据scrapy crawl demo_spider -o data.jsonscrapy crawl demo_spider -o data.csv4. 项目目录结构plaintextmyspider/├─myspider/│ ├─__init__.py│ ├─items.py #定义数据字段│ ├─middlewares.py #中间件│ ├─pipelines.py #数据处理管道│ ├─settings.py #爬虫全局配置│ └─spiders/ #存放各个爬虫文件│ └─demo_spider.py└─scrapy.cfg5. 最简示例spiders/demo_spider.pyimport scrapyclass DemoSpider(scrapy.Spider):name demo_spider #爬虫唯一名字crawl命令用这个allowed_domains [example.com]start_urls [https://example.com] #初始urldef parse(self, response):# response 网页响应对象title response.xpath(//title/text()).get() #xpath提取yield {title:title} #产出数据交给pipelineparse()默认回调函数拿到网页 response做 xpath/css 选择器解析yield产出数据 / 新请求。yield scrapy.Request(url,callbackxxx) 生成下一页请求。xpath /css 选择器python运行#xpathresponse.xpath(//div[classtitle]/text()).get() #取第一条response.xpath(//div[classtitle]/text()).getall() #全部结果#css选择器response.css(div.title::text).get()6. settings.py 常用配置# 是否遵守robots协议正式爬虫关闭ROBOTSTXT_OBEY False#并发请求数调大爬的快容易封IPCONCURRENT_REQUESTS 16#请求间隔防反爬单位秒DOWNLOAD_DELAY 1#请求头伪装浏览器DEFAULT_REQUEST_HEADERS {User-Agent:Mozilla/5.0 (Windows NT 10.0; Win64; x64) Chrome/120.0.0.0 Safari/537.36}#开启pipelineITEM_PIPELINES {myspider.pipelines.MyspiderPipeline: 300, #数字代表执行优先级越小越先执行}7. Item Pipeline 示例items.pypython运行import scrapyclass DemoItem(scrapy.Item):title scrapy.Field()pipelines.pypython运行class MyspiderPipeline:def process_item(self, item, spider):#每条数据进来执行可以写入库逻辑print(item)return item8. 优缺点✅优点异步架构并发高速度远高于 requests 循环自带 url 去重、重试、调度队列不用自己写队列xpath/css 解析开箱即用完整组件化适合大批量爬虫支持导出 json、csv对接数据库方便❌缺点JS 渲染动态页面拿不到数据需要搭配 Selenium/Playwright学习成本高于简单 requests 脚本调试不如普通脚本直观如果页面是 JS 渲染使用 scrapy‑playwright 插件集成浏览器渲染。9. 常见坑403 被拦截需要设置 UA、Cookie、代理、加大 DOWNLOAD_DELAY中文乱码scrapy 内部自动处理编码输出文件乱码在导出时设置编码url 没有被爬取检查allowed_domains会过滤域外链接url 去重机制导致重复 url 不会再次请求动态网页拿不到内容scrapy 默认不执行 JS需要浏览器渲染组件。