scrapy是一个为了爬取网站数据, 提取结构性数据而编写的应用框架, 它是基于Twisted框架开发而来, 而Twisted框架是事件驱动的, 比较适合异步代码. 对会阻塞线程的操作, 包括访问数据库、文件或者web, 或者产生新的进程并需要处理新进程的输出、执行系统层次操作的代码, Twisted提供了允许执行上面的操作但不会阻塞代码执行的方法.

scrapy五大核心组件

  • 引擎(ENGINE): 用来处理整个系统的数据流, 触发事务, 是框架的核心.
  • 调度器(Scheduler): 用来接收引擎发过来的请求, 压入队列中, 并在引擎再次请求的时候返回, 可以看成是一个url的优先队列, 由它来决定下一个要抓取的网址是什么, 同时也会去除重复的网址.
  • 下载器(Downloader): 用于下载网页内容, 并将网页内容返回给引擎, 下载器是建立在高效异步的twisted模型上的.
  • 爬虫(Spiders): 用于从特定的网页中提取自己需要的信息, 也可以从中提取链接, 让scrapy继续抓取下一个页面.
  • 管道(Pipelines): 负责处理爬虫从网页中抽取到的实体item, 持久化实体, 验证实体的有效性, 清除不需要的信息, 当页面被爬虫解析后, 将被发送到项目管道, 并经过几个特定的次序处理数据.

scrapy的流程

  1. 爬虫SPIDERS将初始请求交给引擎ENGINE.

  2. 引擎ENGINE获取到初始请求, 并交给调度器SCHEDULER.

  3. 调度器SCHEDULER处理后返回一个请求给引擎ENGINE.

  4. 引擎ENGINE将请求经下载中间件MIDDLEWARES发送到下载器DOWNLOADER, 下载页面数据.

  5. 一旦下载器完成页面下载, 就会将下载结果通过下载中间件MIDDLEWARES返回给引擎ENGINE.

  6. 引擎ENGINE将获取到的响应通过爬虫中间件MIDDLEWARES返回给爬虫SPIDERS进行处理.

  7. 爬虫SPIDERS处理响应, 并通过中间件MIDDLEWARES返回处理后的items, 或新的请求给引擎.

  8. 引擎ENGINE发送处理后的items到项目管道PIPELINES, 进行持久化存储; 如果是新的请求则传给调度器SCHEDULER.

  9. 重复该过程, 直到爬取完所有的url请求.

scrapy命令

# 创建项目
scrapy startproject name # 创建爬虫程序
scrapy genspider jd_search search.jd.com # 启动爬虫程序
scrapy crawl jd_search --nolog # 存储数据结果到文件
scrapy crawl jd_search -o jd_search.xml

scrapy的常用配置

# 设置日志等级, 只记录error
LOG_LEVEL = 'ERROR' # UA, 也可以在下载中间件中设置
USER_AGENT = 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/85.0.4183.83 Safari/537.36' # robot协议
ROBOTSTXT_OBEY = False # 开启管道
ITEM_PIPELINES = {
'scrapy_demo.pipelines.ScrapyDemoPipeline': 300, # 数字表示优先级, 数字越小, 优先级越高
} # 开启下载中间件
DOWNLOADER_MIDDLEWARES = {
'jdSpiderPro.middlewares.JdspiderproDownloaderMiddleware': 543,
}
# 设置下载延迟
DOWNLOAD_DELAY = 5 # 设置并发线程数
CONCURRENT_REQUESTS = 64 # 禁用cookie
COOKIES_ENABLED = False

爬虫---scrapy架构和原理的更多相关文章

  1. python爬虫入门(六) Scrapy框架之原理介绍

    Scrapy框架 Scrapy简介 Scrapy是用纯Python实现一个为了爬取网站数据.提取结构性数据而编写的应用框架,用途非常广泛. 框架的力量,用户只需要定制开发几个模块就可以轻松的实现一个爬 ...

  2. 第三百四十五节,Python分布式爬虫打造搜索引擎Scrapy精讲—爬虫和反爬的对抗过程以及策略—scrapy架构源码分析图

    第三百四十五节,Python分布式爬虫打造搜索引擎Scrapy精讲—爬虫和反爬的对抗过程以及策略—scrapy架构源码分析图 1.基本概念 2.反爬虫的目的 3.爬虫和反爬的对抗过程以及策略 scra ...

  3. 二十四 Python分布式爬虫打造搜索引擎Scrapy精讲—爬虫和反爬的对抗过程以及策略—scrapy架构源码分析图

    1.基本概念 2.反爬虫的目的 3.爬虫和反爬的对抗过程以及策略 scrapy架构源码分析图

  4. Scrapy的架构与原理的理解【转】

    Scrapy 框架 Scrapy是用纯Python实现一个为了爬取网站数据.提取结构性数据而编写的应用框架,用途非常广泛. 框架的力量,用户只需要定制开发几个模块就可以轻松的实现一个爬虫,用来抓取网页 ...

  5. Python爬虫-Scrapy框架的工作原理

    Scrapy框架工作原理 Scrapy框架架构图 Scrapy框架主要由六大组件组成,分别为: ​ 调度器(Scheduler),下载器(Downler),爬虫(Spiders),中间件(Middwa ...

  6. scrapy架构与目录介绍、scrapy解析数据、配置相关、全站爬取cnblogs数据、存储数据、爬虫中间件、加代理、加header、集成selenium

    今日内容概要 scrapy架构和目录介绍 scrapy解析数据 setting中相关配置 全站爬取cnblgos文章 存储数据 爬虫中间件和下载中间件 加代理,加header,集成selenium 内 ...

  7. python爬虫scrapy框架

    Scrapy 框架 关注公众号"轻松学编程"了解更多. 一.简介 Scrapy是用纯Python实现一个为了爬取网站数据.提取结构性数据而编写的应用框架,用途非常广泛. 框架的力量 ...

  8. scrapy架构初探

    scrapy架构初探 引言 Python即时网络爬虫启动的目标是一起把互联网变成大数据库.单纯的开放源代码并不是开源的全部,开源的核心是"开放的思想",聚合最好的想法.技术.人员, ...

  9. python爬虫scrapy框架——人工识别登录知乎倒立文字验证码和数字英文验证码(2)

    操作环境:python3 在上一文中python爬虫scrapy框架--人工识别知乎登录知乎倒立文字验证码和数字英文验证码(1)我们已经介绍了用Requests库来登录知乎,本文如果看不懂可以先看之前 ...

随机推荐

  1. CSS性能优化的几个技巧

    前言 随着互联网发展至今,对于网站来说,性能显的越来越重要了,CSS作为页面渲染和内容展现的重要环节,影响着用户对整个网站的第一体验.所以,我们需要重视与CSS相关的性能优化. 项目开发初期我们可能因 ...

  2. Linux中8个有用的touch命令

    在Linux中,每个文件都有时间戳,并且每个文件都存储上次访问时间,上次修改时间,上次改变时间的信息.因此,无论什么时候我们创建新的文件,访问或者修改一个存在的文件,那个文件的时间戳会自动被更改. 在 ...

  3. pip安装使用国内源的两种方法

    pip安装后使用pip安装第三方库默认是国外源,一般安装慢连接不稳定,等得花儿都谢了,结果还告诉你安装失败..../(ㄒoㄒ)/~~ 这时我们就要想想其它办法啦,毕竟不能强求 国外不行,就只有国内了赛 ...

  4. Python knife 一款伪菜刀

    Python knife ​ 一款伪菜刀. ​ 设计之初,本想只写个命令行的就可以了,但又想与众不同,想用python写代码,又不想用c#写前端(c#太卡了),万分无奈之下,找到一个替代品,Pyqt, ...

  5. Mod_Security 安装配置

    Mod_Security 安装配置 OS平台:Ubuntu 16 服务器:Apache2 一.更新Ubuntu apt-get更新源 sudo mv /etc/apt/sources.list /et ...

  6. 【SEED Labs】TCP Attacks Lab

    Lab Overview 实验环境下载:https://seedsecuritylabs.org/Labs_16.04/Networking/TCP_Attacks/ 本实验涵盖以下课题: • TCP ...

  7. 绕过CDN找到⽬标站点真实IP

    一.判断目标网站是否使用CDN 在渗透测试中,如果连真实 IP 都没有找到的话,相当于连门都没有找到.所以,如何验证目标网站是否使用了 CDN 呢? 1.多地 ping 法(一般情况下使用多地 pin ...

  8. Markdown初识及基本使用

    Markdown初识及基本使用 ​ 由Typora编写. 一.初识Markdown 允许人们使用易读易写的纯文本格式编写文档. 是一种轻量级标记语言 编写的文档可以导出 HTML .Word.图像.P ...

  9. Nature | 易基因DNA甲基化测序助力人多能干细胞向胚胎全能8细胞的人工诱导

    北京时间2022年3月22日凌晨,<Nature>期刊在线刊登了由中国科学院广州生物医学与健康研究所等单位牵头,深圳市易基因科技有限公司.中国科学技术大学等单位参与,应用人多能干细胞向胚胎 ...

  10. phptorm 集成git和gitlab和一些命令

    mac: 2.phpstorm->csv->create git... 3.命令:ssh-keygen -t rsa -C"your_email@youremail.com&qu ...