「这是我参与11月更文挑战的第3天,活动详情查看:2021最后一次更文挑战」
Scrapy爬虫框架
scrapy是什么
它是一个快速功能强大的开源网络爬虫框架
Github地址:github.com/scrapy/scra…
官网地址:scrapy.org/
scrapy的安装
cmd上运行
pip install scrapy
测试: scrapy -h
一般直接pip install scrapy会出错,可参考:【转】
安装成功后测试会(scrapy -h):
Scrapy爬虫框架结构
“5+2”结构
框架组件:
组件 | 作用 |
---|---|
Scrapy Engine | 引擎,处理整个框架的数据流 |
Scheduler | 调度器,接收引擎发过来的请求,将其排至队列中,当引擎再次请求时返回 |
Downloader | 下载器,下载所有引擎发送的请求,并将获取的源代码返回给引擎,之后由引擎交给爬虫处理 |
Spiders | 爬虫,接收并处理所有引擎发送过来的源代码,从中分析并提取item字段所需要的数据,并将需要跟进的url提交给引擎,再次进入调度器 |
Item Pipeline | 管道,负责处理从爬虫中获取的Item,并进行后期处理 |
Downloader Middlewares | 下载中间件,可以理解为自定义扩展下载功能的组件 |
Spider Middlewares | Spider中间件,自定义扩展和操作引擎与爬虫之间通信的功能组件 |
Scrapy爬虫的数据类型
- Request类
- Response类
- Item类
Scrapy数据处理流程:
- 当需要打开一个域名时,爬虫开始获取第一个url,并返回给引擎
- 引擎把url作为一个请求交给调度器
- 引擎再次对调度器发出请求,并接收上一次让调度器处理的请求
- 引擎将请求交给下载器
- 下载器下载完成后,作为响应返回给引擎
- 引擎把响应交给爬虫,爬虫开始进一步处理,处理完成后有两个数据,一个是需要跟进的url,另一个是获取到的item数据,然后把结果返回给引擎
- 引擎把需要跟进的url给调度器,把获取的item数据给管道
- 然后从第2步开始循环,知道获取信息完毕。只有调度器中没有任何请求时,程序才会停止
Scrapy爬虫的基本使用
yield关键字的使用
- 包含yield语句的函数是一个生成器
- 生成器每次产生一个值(yield语句),函数被冻结,被唤醒后再产生一个值
- 生成器是一个不断产生值的函数
Scrapy爬虫的常用命令
命令 | 说明 | 格式 |
---|---|---|
startproject | 创建一个新工程 | scrapy startproject projectName |
genspider | 创建一个爬虫 | scrapy genspider [options]name domain |
settings | 获得爬虫配置信息 | scrapy settings [options] |
crawl | 运行一个爬虫 | scrapy crawl spider |
list | 列出工程中所有爬虫 | scrapy list |
shell | 启动URL调试命令行 | scrapy shell [url] |
Scrapy爬虫的使用步骤
- 新建项目 (scrapy startproject xxx):新建一个新的爬虫项目
创建工程:scrapy startproject mydemo
目录树:
工程目录下各个文件的作用
文件 | 作用 |
---|---|
scrapy.cfg | 配置文件 |
spiders | 存放你Spider文件,也就是你爬取的py文件 |
items.py | 相当于一个容器,和字典较像 |
middlewares.py | 定义Downloader Middlewares(下载器中间件)和Spider Middlewares(蜘蛛中间件)的实现 |
pipelines.py | 定义Item Pipeline的实现,实现数据的清洗,储存,验证。 |
settings.py | 全局配置 |
- 明确目标 (编写items.py):明确你想要抓取的目标
items.py文件内容
- 制作爬虫 (spiders/xxspider.py):制作爬虫开始爬取网页
Spider爬虫模板:
- 存储内容 (pipelines.py):设计管道存储爬取内容
实例:豆瓣Top250信息-Scrapy爬虫
创建工程:
scrapy startproject douban
在douban目录下:
scrapy genspider douban_scrapy douban.com
明确目标
我们打算抓取movie.douban.com/top250
网站里的所有电影的序号、名称、介绍、评分、评论数、描述
1 | python复制代码打开 douban 目录下的 items.py。 |
items.py
1 | python复制代码import scrapy |
制作爬虫 (spiders/douban_scrapy.py)
在当前目录下输入命令,将在mySpider/spider目录下创建一个名为itcast的爬虫,并指定爬取域的范围:
scrapy genspider douban_scrapy movie.douban.com
打开 douban/spider目录里的 douban_scrapy.py,默认增加了下列代码:
1 | python复制代码#douban_scrapy.py |
保存数据 (pipeline.py)
一.scrapy保存信息的最简单的方法主要有四种,-o 输出指定格式的文件,命令如下:
scrapy crawl douban_scrapy -o douban.json
json lines格式,默认为Unicode编码
scrapy crawl douban_scrapy -o douban.jsonl
csv 逗号表达式,可用Excel打开
scrapy crawl douban_scrapy -o douban.csv
xml格式
scrapy crawl douban_scrapy -o douban.xml
二、通过pipeline存储进mysql
1 | python复制代码pipeline.py |
一些配置
1 | python复制代码#settings.py |
本文转载自: 掘金