爬虫---scrapy架构和原理
scrapy是一个为了爬取网站数据, 提取结构性数据而编写的应用框架, 它是基于Twisted框架开发而来, 而Twisted框架是事件驱动的, 比较适合异步代码. 对会阻塞线程的操作, 包括访问数据库、文件或者web, 或者产生新的进程并需要处理新进程的输出、执行系统层次操作的代码, Twisted提供了允许执行上面的操作但不会阻塞代码执行的方法.
scrapy五大核心组件
- 引擎(ENGINE): 用来处理整个系统的数据流, 触发事务, 是框架的核心.
- 调度器(Scheduler): 用来接收引擎发过来的请求, 压入队列中, 并在引擎再次请求的时候返回, 可以看成是一个url的优先队列, 由它来决定下一个要抓取的网址是什么, 同时也会去除重复的网址.
- 下载器(Downloader): 用于下载网页内容, 并将网页内容返回给引擎, 下载器是建立在高效异步的twisted模型上的.
- 爬虫(Spiders): 用于从特定的网页中提取自己需要的信息, 也可以从中提取链接, 让scrapy继续抓取下一个页面.
- 管道(Pipelines): 负责处理爬虫从网页中抽取到的实体item, 持久化实体, 验证实体的有效性, 清除不需要的信息, 当页面被爬虫解析后, 将被发送到项目管道, 并经过几个特定的次序处理数据.
scrapy的流程
爬虫SPIDERS将初始请求交给引擎ENGINE.
引擎ENGINE获取到初始请求, 并交给调度器SCHEDULER.
调度器SCHEDULER处理后返回一个请求给引擎ENGINE.
引擎ENGINE将请求经下载中间件MIDDLEWARES发送到下载器DOWNLOADER, 下载页面数据.
一旦下载器完成页面下载, 就会将下载结果通过下载中间件MIDDLEWARES返回给引擎ENGINE.
引擎ENGINE将获取到的响应通过爬虫中间件MIDDLEWARES返回给爬虫SPIDERS进行处理.
爬虫SPIDERS处理响应, 并通过中间件MIDDLEWARES返回处理后的items, 或新的请求给引擎.
引擎ENGINE发送处理后的items到项目管道PIPELINES, 进行持久化存储; 如果是新的请求则传给调度器SCHEDULER.
重复该过程, 直到爬取完所有的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架构和原理的更多相关文章
- python爬虫入门(六) Scrapy框架之原理介绍
Scrapy框架 Scrapy简介 Scrapy是用纯Python实现一个为了爬取网站数据.提取结构性数据而编写的应用框架,用途非常广泛. 框架的力量,用户只需要定制开发几个模块就可以轻松的实现一个爬 ...
- 第三百四十五节,Python分布式爬虫打造搜索引擎Scrapy精讲—爬虫和反爬的对抗过程以及策略—scrapy架构源码分析图
第三百四十五节,Python分布式爬虫打造搜索引擎Scrapy精讲—爬虫和反爬的对抗过程以及策略—scrapy架构源码分析图 1.基本概念 2.反爬虫的目的 3.爬虫和反爬的对抗过程以及策略 scra ...
- 二十四 Python分布式爬虫打造搜索引擎Scrapy精讲—爬虫和反爬的对抗过程以及策略—scrapy架构源码分析图
1.基本概念 2.反爬虫的目的 3.爬虫和反爬的对抗过程以及策略 scrapy架构源码分析图
- Scrapy的架构与原理的理解【转】
Scrapy 框架 Scrapy是用纯Python实现一个为了爬取网站数据.提取结构性数据而编写的应用框架,用途非常广泛. 框架的力量,用户只需要定制开发几个模块就可以轻松的实现一个爬虫,用来抓取网页 ...
- Python爬虫-Scrapy框架的工作原理
Scrapy框架工作原理 Scrapy框架架构图 Scrapy框架主要由六大组件组成,分别为: 调度器(Scheduler),下载器(Downler),爬虫(Spiders),中间件(Middwa ...
- scrapy架构与目录介绍、scrapy解析数据、配置相关、全站爬取cnblogs数据、存储数据、爬虫中间件、加代理、加header、集成selenium
今日内容概要 scrapy架构和目录介绍 scrapy解析数据 setting中相关配置 全站爬取cnblgos文章 存储数据 爬虫中间件和下载中间件 加代理,加header,集成selenium 内 ...
- python爬虫scrapy框架
Scrapy 框架 关注公众号"轻松学编程"了解更多. 一.简介 Scrapy是用纯Python实现一个为了爬取网站数据.提取结构性数据而编写的应用框架,用途非常广泛. 框架的力量 ...
- scrapy架构初探
scrapy架构初探 引言 Python即时网络爬虫启动的目标是一起把互联网变成大数据库.单纯的开放源代码并不是开源的全部,开源的核心是"开放的思想",聚合最好的想法.技术.人员, ...
- python爬虫scrapy框架——人工识别登录知乎倒立文字验证码和数字英文验证码(2)
操作环境:python3 在上一文中python爬虫scrapy框架--人工识别知乎登录知乎倒立文字验证码和数字英文验证码(1)我们已经介绍了用Requests库来登录知乎,本文如果看不懂可以先看之前 ...
随机推荐
- 软件工程homework-001
一. 回顾你过去将近3年的学习经历 1.当初你报考的时候,是真正喜欢计算机这个专业吗? 答:不喜欢,高中时候就已经对计算机比较抵触了,家里小时候比较富裕,九几年就在日本买了第一批家用台式机 ...
- Spring 中的 bean线程安全性分析
首先:Spring 中的 bean不是线程安全的 Spring容器中的Bean是否线程安全,容器本身并没有提供Bean的线程安全策略,因此可以说Spring容器中的Bean本身不具备线程安全的特性,但 ...
- CentOS Stream 8 安装 Zabbix6.0 -- LNMP环境(nginx-1.20,mariadb-10.6,php-7.4)
镜像下载.域名解析.时间同步请点击阿里云开源镜像站 zabbix6.0 LTS版本出来了,前段时间刚安装了5.4,今天打算在虚拟机上安装6.0测试,安装6.0的要求php版本不低于7.2,mariad ...
- 进制转换 Java day6
今天周末学习的不多,只学习了一些二进制转十进制,八进制.十六进制,以及数据单位 二进制转十进制 我们都知道十进制转二进制就是除以2取余的方法.那二进制转到十进制又如何处理呢,今天我来学习以下 我们看看 ...
- 西门子S7-1200PLC不让下载一直报“模块具有激活的测试和调试功能,防止下载到设备”解决方法
错误如图 这是因为PLC被强制了,导致下载会报这类错误.取消强制就可以下载. 或者将cpu重置为出厂设置,也能再次下载. 参考:https://www.ad.siemens.com.cn/servic ...
- python3 使用mongo数据库
0让服务器端开启服务 sudo mongod --port 27017 --dbpath /data/db --logpath /data/log --logappend --fork --auth ...
- Http请求的Get和Post的区别?
1. get从地址栏以明文的方式提交请求信息内容?username=admin&password=123,用户可见, 而post从请求正文提交请求信息内容,用户不可见. 2. get提交因为是 ...
- kafka 为什么那么快?
Cache Filesystem Cache PageCache缓存 顺序写 由于现代的操作系统提供了预读和写技术,磁盘的顺序写大多数情况下比随机写内存还要快. Zero-copy 零拷⻉技术减少拷贝 ...
- Redis的集群搭建(四)
1.redis-cluster架构图 2.redis-cluster投票:容错 架构细节: (1)所有的redis节点彼此互联(PING-PONG机制),内部使用二进制协议优化传输速度和带宽. (2) ...
- Hadoop的安装配置(一)
一.Hadoop的安装①Hadoop运行的前提是本机已经安装了JDK,配置JAVA_HOME变量②在Hadoop中启动多种不同类型的进程 例如NN,DN,RM,NM,这些进程需要进行通信 ...