Scrapy框架
1.介绍
写一个爬虫,需要做很多的事情。比如:发送网络请求、数据解析、数据存储、反反爬虫机制(更换ip代理、设置请求头等)、异步请求等。这些工作如果每次都要自己从零开始写的话,比较浪费时间。因此Scrapy
把一些基础的东西封装好了,在他上面写爬虫可以变的更加的高效(爬取效率和开发效率)。因此真正在公司里,一些上了量的爬虫,都是使用Scrapy
框架来解决。
2.架构图
- 爬虫给引擎发送请求
- 引擎发给调度器,调度器接收到url以后将url生成requests对象并存储到队列中
- 引擎从调度器中取出请求
- 引擎将requests对象传输给下载器
- 下载器拿到请求从网上下载数据,再将数据组装成response对象返回给引擎
- 引擎拿到response对象,返回给爬虫
- 爬虫对数据再进行分析,留下需要的数据再将结果返回给引擎
- 引擎将数据给管道存到redis或者mysql或者mongodb中
我们的主要工作是写爬虫部分,引擎、调度器、下载器和管道已经封装好了。
3.快速入门
使用以下代码安装Scrapy框架,
pip install scrapy
我们需要在cmd中使用以下代码创建爬虫项目,
scrapy startproject 项目名称
我们可以看到Scrapy框架会自动创建一下文件,
这些文件分别为,
- items.py:用来存放爬虫爬取下来数据的模型
- middlewares.py:用来存放各种中间件的文件
- pipelines.py:用来将
items
的模型存储到本地磁盘中。 - settings.py:本爬虫的一些配置信息(比如请求头、多久发送一次请求、ip代理池等)
- scrapy.cfg:项目的配置文件
- spiders包:以后所有的爬虫,都是存放到这个里面
创建好项目后,我们cd到相应目录下,并使用下面的代码创建一个爬虫,
scrapy genspider 爬虫名称 "目标网站二级域名"
注意,爬虫名称不能和项目重名。
Scrapy框架会自动在spiders文件夹下面创建一个爬虫。
4.爬取糗事百科
我们使用以下代码创建项目和爬虫,
scrapy startproject qsbk
cd qsbk
scrapy genspider qsbk_demo "qiushibaike.com"
我们首先要补全items.py文件的代码,这个文件中存放爬虫爬取下来数据的模型,这些模型类似于django框架中的ORM模型,我们只需定义要爬取什么内容即可。例如,我们爬取糗事百科中的段子作者和内容,
import scrapy
class QsbkItem(scrapy.Item):
author = scrapy.Field() # 段子作者
content = scrapy.Field() # 段子内容
我们可以看到Scrapy框架中qsbk_demo.py中自动生成以下代码,
class QsbkDemoSpider(scrapy.Spider):
name = 'qsbk_demo' # 爬虫名称
allowed_domains = ['qiushibaike.com'] # 目标网站url
start_urls = ['https://www.qiushibaike.com/'] # 爬虫开始爬取的网页
def parse(self, response