Python Scrapy爬虫框架详解

Scrapy 是一个基于 Twisted 实现的异步处理爬虫框架,该框架使用纯 Python 语言编写。Scrapy 框架应用广泛,常用于数据采集、网络监测,以及自动化测试等。

提示:Twisted 是一个基于事件驱动的网络引擎框架,同样采用 Python 实现。

Scrapy下载安装

Scrapy 支持常见的主流平台,比如 Linux、Mac、Windows 等,因此你可以很方便的安装它。本节以 Windows 系统为例,在 CMD 命令行执行以下命令:

python -m pip install Scrapy

由于 Scrapy 需要许多依赖项,因此安装时间较长,大家请耐心等待,关于其他平台的安装方法,可参考官方文档《Scrapy安装指南》。

验证安装,如下所示:

C:\Users\Administrator>python
Python 3.7.4 (tags/v3.7.4:e09359112e, Jul  8 2019, 19:29:22) [MSC v.1916 32 bit (Intel)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> import scrapy
>>> exit()

如果可以正常执行exit()操作,并且没有出现 ERROR 错误,则说明安装成功。

创建Scrapy爬虫项目

Scrapy 框架提供了一些常用的命令用来创建项目、查看配置信息,以及运行爬虫程序。常用指令如下所示:

常用指令

命令 格式 说明
startproject scrapy startproject <项目名> 创建一个新项目。
genspider scrapy genspider <爬虫文件名> <域名> 新建爬虫文件。
runspider scrapy runspider <爬虫文件> 运行一个爬虫文件,不需要创建项目。
crawl scrapy crawl 运行一个爬虫项目,必须要创建项目。
list scrapy list 列出项目中所有爬虫文件。
view scrapy view <url地址> 从浏览器中打开 url 地址。
shell csrapy shell <url地址> 命令行交互模式。
settings scrapy settings 查看当前项目的配置信息。

1) 创建第一个Scrapy爬虫项目

下面创建名为 Baidu 的爬虫项目,打开 CMD 命令提示符进行如下操作:

C:\Users\Administrator>cd DesktopC:\Users\Administrator\Desktop>scrapy startproject Baidu
New Scrapy project 'Baidu', using template directory 'd:\python\python37\lib\site-packages\scrapy\templates\project', created in:C:\Users\Administrator\Desktop\Baidu
# 提示后续命令操作
You can start your first spider with:cd Baiduscrapy genspider example example.com

打开新建的项目“Baidu”会有以下项目文件,如图所示:

图1:项目文件

接下来,创建一个爬虫文件,如下所示:

C:\Users\Administrator\Desktop>cd Baidu
C:\Users\Administrator\Desktop\Baidu>scrapy genspider baidu www.baidu.com
Created spider 'baidu' using template 'basic' in module:Baidu.spiders.baidu

下面呈现了项目的目录树结构,以及各个文件的作用:

Baidu                   # 项目文件夹
├── Baidu               # 用来装载项目文件的目录
│   ├── items.py        # 定义要抓取的数据结构
│   ├── middlewares.py  # 中间件,用来设置一些处理规则
│   ├── pipelines.py    # 管道文件,处理抓取的数据
│   ├── settings.py     # 全局配置文件
│   └── spiders         # 用来装载爬虫文件的目录
│       ├── baidu.py    # 具体的爬虫程序
└── scrapy.cfg          # 项目基本配置文件`

从上述目录结构可以看出,Scrapy 将整个爬虫程序分成了不同的模块,让每个模块负责处理不同的工作,而且模块之间紧密联系。因此,您只需要在相应的模块编写相应的代码,就可以轻松的实现一个爬虫程序。

Scrapy爬虫工作流程

Scrapy 框架由五大组件构成,如下所示:

Scrapy|五大组件

名称 作用说明
Engine(引擎) 整个 Scrapy 框架的核心,主要负责数据和信号在不同模块间传递。
Scheduler(调度器) 用来维护引擎发送过来的 request 请求队列。
Downloader(下载器) 接收引擎发送过来的 request 请求,并生成请求的响应对象,将响应结果返回给引擎。
Spider(爬虫程序) 处理引擎发送过来的 response, 主要用来解析、提取数据和获取需要跟进的二级URL,然后将这些数据交回给引擎。
Pipeline(项目管道) 用实现数据存储,对引擎发送过来的数据进一步处理,比如存 MySQL 数据库等。

在整个执行过程中,还涉及到两个 middlewares 中间件,分别是下载器中间件(Downloader Middlewares)和蜘蛛中间件(Spider Middlewares),它们分别承担着不同的作用:

下载器中间件,位于引擎和下载器之间,主要用来包装 request 请求头,比如 UersAgent、Cookies 和代理 IP 等

蜘蛛中间件,位于引擎与爬虫文件之间,它主要用来修改响应对象的属性。

Scrapy 工作流程示意图如下所示:

图1:工作流程示意图

上述示意图描述如下,当一个爬虫项目启动后,Scrapy 框架会进行以下工作:

第一步:由“引擎”向爬虫文件索要第一个待爬取的 URL,并将其交给调度器加入 URL 队列当中(对应图中1/2步骤)。

第二步:调度器处理完请求后, 将第一个 URL 出队列返回给引擎;引擎经由下载器中间件将该 URL 交给下载器去下载 response 对象(对应3/4步骤)。

第三步:下载器得到响应对象后,将响应结果交给引擎,引擎收到后,经由蜘蛛中间件将响应结果交给爬虫文件(对应5/6步骤)。

第四步:爬虫文件对响应结果进行处理、分析,并提取出所需要的数据。

第五步:最后,提取的数据会交给管道文件去存数据库,同时将需要继续跟进的二级页面 URL 交给调度器去入队列(对应7/8/9步骤)。

上述过程会一直循环,直到没有要爬取的 URL 为止,也就是 URL 队列为空时才会停止。

settings配置文件

在使用 Scrapy 框架时,还需要对配置文件进行稍微改动。下面使用 Pycharm 打开刚刚创建的“Baidu”项目,对配置文件进行如下修改:

# 1、定义User-Agent
USER_AGENT = 'Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0)'
# 2、是否遵循robots协议,一般设置为False
ROBOTSTXT_OBEY = False
# 3、最大并发量,默认为16
CONCURRENT_REQUESTS = 32
# 4、下载延迟时间
DOWNLOAD_DELAY = 1
其余常用配置项介绍:
# 设置日志级别,DEBUG < INFO < WARNING < ERROR < CRITICAL
LOG_LEVEL = ' '
# 将日志信息保存日志文件中,而不在终端输出
LOG_FILE = ''
# 设置导出数据的编码格式(主要针对于json文件)
FEED_EXPORT_ENCODING = ''
# 非结构化数据的存储路径
IMAGES_STORE = '路径'
# 请求头,此处可以添加User-Agent、cookies、referer等
DEFAULT_REQUEST_HEADERS={'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8','Accept-Language': 'en',
}
# 项目管道,300 代表激活的优先级 越小越优先,取值1到1000
ITEM_PIPELINES={'Baidu.pipelines.BaiduPipeline':300
}
# 添加下载器中间件
DOWNLOADER_MIDDLEWARES = {}

想要了解更多关于 Scrapy 框架的知识,可参考官方文档:

https://docs.scrapy.org/en/latest/index.html

Python Scrapy爬虫框架详解相关推荐

  1. Python Scrapy爬虫框架实战应用

    通过上一节<Python Scrapy爬虫框架详解>的学习,您已经对 Scrapy 框架有了一个初步的认识,比如它的组件构成,配置文件,以及工作流程.本节将通过一个的简单爬虫项目对 Scr ...

  2. Python Scrapy爬虫框架爬取51job职位信息并保存至数据库

    Python Scrapy爬虫框架爬取51job职位信息并保存至数据库 -------------------------------- 版权声明:本文为CSDN博主「杠精运动员」的原创文章,遵循CC ...

  3. Python Scrapy 爬虫框架爬取推特信息及数据持久化!整理了我三天!

    最近要做一个国内外新冠疫情的热点信息的收集系统,所以,需要爬取推特上的一些数据,然后做数据分类及情绪分析.作为一名合格的程序员,我们要有「拿来主义精神」,借助别人的轮子来实现自己的项目,而不是从头搭建 ...

  4. 崔老哥python scrapy爬虫框架入门

    Scrapy 爬虫框架入门案例详解 Scrapy入门 创建项目 创建Spider 创建Item 解析Response 使用Item 后续Request 保存到文件 使用Item Pipeline 源代 ...

  5. Scrapy-Redis分布式爬虫框架详解-邮乐网(ule.com)

    python编程快速上手(持续更新中-) python爬虫从入门到精通 Scrapy爬虫框架 文章目录 python编程快速上手(持续更新中-) python爬虫从入门到精通 Scrapy爬虫框架 一 ...

  6. python selenium爬虫_详解基于python +Selenium的爬虫

    详解基于python +Selenium的爬虫 一.背景 1. Selenium Selenium 是一个用于web应用程序自动化测试的工具,直接运行在浏览器当中,支持chrome.firefox等主 ...

  7. python学习框架图-Python Scrapy爬虫框架学习

    Scrapy 是用Python实现一个为爬取网站数据.提取结构性数据而编写的应用框架. 一.Scrapy框架简介 Scrapy是一个为了爬取网站数据,提取结构性数据而编写的应用框架. 可以应用在包括数 ...

  8. Python Scrapy爬虫框架学习!半小时掌握它!

    Scrapy 是用Python实现一个为爬取网站数据.提取结构性数据而编写的应用框架. 一.Scrapy框架简介 Scrapy是一个为了爬取网站数据,提取结构性数据而编写的应用框架. 可以应用在包括数 ...

  9. python之flask框架详解

    目录 前言 1.新建文件helloworld.py 2.相关配置参数 3.加载配置文件 3.1配置对象加载 3.2配置文件加载 3.3读取配置 4 路由定义 4.1指定路由地址 4.2 给路由传参 4 ...

  10. Python 网络爬虫入门详解

    什么是网络爬虫 网络爬虫又称网络蜘蛛,是指按照某种规则在网络上爬取所需内容的脚本程序.众所周知,每个网页通常包含其他网页的入口,网络爬虫则通过一个网址依次进入其他网址获取所需内容. 优先申明:我们使用 ...

最新文章

  1. 成功解决FileNotFoundError: [Errno 2] No such file or directory: 'F:\\Program Files\\Python\\Python36\\li
  2. pytorch教程龙曲良41-45
  3. Codeforces 258B Little Elephant and Elections
  4. 数据结构与算法 完整版双链表
  5. 移动硬盘“脱机”(签名冲突)的硬盘如何正常使用
  6. android 新浪微博客户端的表情功能的实现,flutter教程pdf
  7. Java 文件传输 (TCP、UDP)
  8. 使用javascript实现对于chineseocr的API调用
  9. excel查找窗口被拉边上_excel
  10. html页面pc端显示正常,手机端页面整体偏左(兼容性处理)
  11. Unity官方实例教程 Space Shooter(太空射击游戏)
  12. Excel 多个 Sheet 数据关联
  13. 99%的人都不知道的90个秘密
  14. ci定位 lac,基站定位LAC,CID转经纬度
  15. 选择适当的NFC标签类型
  16. git pull fatal: refusing to merge unrelated histories
  17. excel文件下载下来损坏 js_js读取本地excel文件出现问题,这是咋回事
  18. Geohash应用——附近乡镇信息挖掘(提升检索召回与准确)
  19. 未能导入activex控件,请确保它正确注册的完美解决方案
  20. 中国是时候在东亚做老大了?

热门文章

  1. html页面布局主要有哪些形式,HTML页面布局形式与原则
  2. 超市库存java管理系统_Java案例:超市库存管理系统
  3. 关于U盘还原安装Mac系统
  4. 用c语言计算正四棱锥的体积,刘徽与正四棱台体积的计算
  5. SAP常用后台表总结
  6. 以VS2017+OpenCV3.4.7+opencv_contrib3.4.7 为例,用cmake编译,实现所有版本轻松编译,其他版本组合都可借鉴
  7. (二十一) Sed编辑器高级部分
  8. itunes备份和恢复速度一样吗_itunes如何备份短信、电话和照片及恢复教程
  9. 怎么清理计算机磁盘空间,电脑磁盘空间不足怎么清理
  10. openstack rabbitmq报错导致识别不到计算节点 解决方案