十二:爬虫-Scrapy框架(上)

一:Scrapy介绍

1.Scrapy是什么?

Scrapy 是用 Python 实现的一个为了爬取网站数据、提取结构性数据而编写的应用框架(异步爬虫框架)
通常我们可以很简单的通过 Scrapy 框架实现一个爬虫,抓取指定网站的内容或图片
Scrapy使用了Twisted异步网络框架,可以加快我们的下载速度

  • 异步和非阻塞的区别

1.png

异步:调用在发出之后,这个调用就直接返回,不管有无结果
非阻塞:关注的是程序在等待调用结果时的状态,指在不能立刻得到结果之前,该调用不会阻塞当前线程

2.Scrapy的优势

爬虫必备的技术

  • 能够使我们的爬虫程序更加稳定 效率更高(多线程)
  • 配置和可扩展性非常强(很灵活)
  • downloader 下载器(基于多线程的) 发送请求 获取响应的

3.Scrapy参考学习

scrapy官方学习网址:https://scrapy-chs.readthedocs.io/zh_CN/1.0/intro/overview.html
最新的:https://docs.scrapy.org/en/latest/

4.Scrapy的安装

pip install scrapy==2.5.1 -i https://pypi.tuna.tsinghua.edu.cn/simple

二:Scrapy工作流程

一种爬虫方式:

另一种爬虫方式:

工作流程:

scrapy工作流程.png
image.png

1.各个组件的功能介绍:

Scrapy engine(引擎)总指挥:负责数据和信号的在不同模块间的传递scrapy已经实现
Scheduler(调度器)一个队列,存放引擎发过来的request请求scrapy已经实现
Downloader(下载器)下载把引擎发过来的requests请求,并返回给引擎scrapy已经实现
Spider(爬虫)处理引擎发来的response,提取数据,提取url,并交给引擎需要手写
Item Pipline(管道)处理引擎传过来的数据,比如存储需要手写
Downloader Middlewares(下载中间件)可以自定义的下载扩展,比如设置代理一般不用手写
Spider Middlewares(中间件)可以自定义requests请求和进行response过滤一般不用手写
1 引擎(engine)   scrapy已经实现
scrapy的核心, 所有模块的衔接, 数据流程梳理

2 调度器(scheduler)   scrapy已经实现
本质上这东西可以看成是一个队列,里面存放着一堆我们即将要发送的请求,可以看成是一个url的容器
它决定了下一步要去爬取哪一个url,通常我们在这里可以对url进行去重操作。

3 下载器(downloader)  scrapy已经实现
它的本质就是用来发动请求的一个模块,小白们完全可以把它理解成是一个requests.get()的功能,
只不过这货返回的是一个response对象.

4 爬虫(spider)  需要手写 
这是我们要写的第一个部分的内容, 负责解析下载器返回的response对象,从中提取到我们需要的数据

5 管道(Item pipeline)
这是我们要写的第二个部分的内容, 主要负责数据的存储和各种持久化操作

6  下载中间件(downloader Middlewares)  一般不用手写
可以自定义的下载扩展 比如设置代理 处理引擎与下载器之间的请求与响应(用的比较多)

7  爬虫中间件(Spider Middlewares)  一般不用手写
可以自定义requests请求和进行response过滤(处理爬虫程序的响应和输出结果以及新的请求)

三:Scrapy入门与总结

1.Scrapy入门

前提:路径切换 cd  copy path  复制绝对路径 

1. 创建scrapy项目
scrapy startproject mySpider
scrapy startproject(固定的)
mySpider(不固定的 需要创建的项目的名字)

2. 进入项目里面:cd mySpider

3. 创建爬虫程序
scrapy genspider example example.com

scrapy genspider:固定的
example:爬虫程序的名字(不固定的)
example.com:可以允许爬取的范围(不固定的) 是根据你的目标url来指定的 其实很重要 后面是可以修改的

目标url:https://www.baidu.com/

scrapy genspider bd baidu.com

4. 执行爬虫程序
scrapy crawl bd
scrapy crawl:固定的
db:执行的爬虫程序的名字

可以通过start.py文件执行爬虫项目:
from scrapy import cmdline
cmdline.execute("scrapy crawl bd".split())

2.Scrapy文件说明

baidu.py爬虫文件 
    # 爬虫程序的名字
    name = 'bd'
    # 可以爬取的范围
    # 有可能我们在实际进行爬取的时候  第一页可能是xxx.com 第三页可能就变成了xxx.cn 
    # 或者xxx.yy 那么可能就会爬取不到数据
    # 所以我们需要对allowed_domains进行一个列表的添加
    allowed_domains = ['baidu.com']
    # 起始url地址  会根据我们的allowed_domains对网页前缀进行一定的补全 
    # 但有时候补全的url不对 所以我们也要去对他进行修改
    start_urls = ['https://www.baidu.com/']

    # 专门用于解析数据的
    def parse(self, response):  
        
items.py 数据封装的
middlewares.py 中间件(爬虫中间件和下载中间件)
pipelines.py 管道(保存数据的)

settings.py Scrapy的配置项

# 1 自动生成的配置,无需关注,不用修改
BOT_NAME = 'mySpider'
SPIDER_MODULES = ['mySpider.spiders']
NEWSPIDER_MODULE = 'mySpider.spiders'

# 2 取消日志
LOG_LEVEL = 'WARNING'

# 3 设置UA,但不常用,一般都是在MiddleWare中添加
USER_AGENT = 'mySpider (+http://www.yourdomain.com)'

# 4 遵循robots.txt中的爬虫规则,很多人喜欢False,当然我也喜欢....
ROBOTSTXT_OBEY = True

# 5 对网站并发请求总数,默认16
CONCURRENT_REQUESTS = 32

# 6 相同网站两个请求之间的间隔时间,默认是0s。相当于time.sleep()
DOWNLOAD_DELAY = 3

# 7 禁用cookie,默认是True,启用
COOKIES_ENABLED = False

# 8  默认的请求头设置
DEFAULT_REQUEST_HEADERS = {
  'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/103.0.0.0 Safari/537.36',
  'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',
  'Accept-Language': 'en',
}

# 9 配置启用爬虫中间件,Key是class,Value是优先级
SPIDER_MIDDLEWARES = {
   'mySpider.middlewares.MyspiderSpiderMiddleware': 543,
}

# 10 配置启用Downloader MiddleWares下载中间件
DOWNLOADER_MIDDLEWARES = {
   'mySpider.middlewares.MyspiderDownloaderMiddleware': 543,
}

# 11 开启管道  配置启用Pipeline用来持久化数据
ITEM_PIPELINES = {
   'mySpider.pipelines.MyspiderPipeline': 300,
}

settings配置项更多参考: https://www.cnblogs.com/seven0007/p/scrapy_setting.html

3.Scrapy总结

scrapy其实就是把我们平时写的爬虫进行了四分五裂式的改造. 对每个功能进行了单独的封装, 并且, 各个模块之间互相的不做依赖. 一切都由引擎进行调配. 这种思想希望你能知道–解耦. 让模块与模块之间的关联性更加的松散. 这样我们如果希望替换某一模块的时候会非常的容易. 对其他模块也不会产生任何的影响

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/277604.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

PayPal账户被封是因为什么?如何解决?

Paypal作为跨境出海玩家最常用的付款工具之一,同时也是最容易出现冻结封号现象。保障PP账号安全非常重要,只有支付渠道安全,才不会“白费力气”,那么最重要的就是要了解它的封号原因以做好规避。 一、Paypal账号被封原因 1、账号…

逻辑卷学习

磁盘分区的缺点 1.无法扩容 2.必须使用的空间 3.没有备份: 一、逻辑卷的定义 LVM 是 Logical Volume Manager 的简称,译为中文就是逻辑卷管理。它是 Linux 下对硬盘分区的一种管理机制。LVM 适合于管理大存储设备,并允许用户动态调整文件系统的大小…

Mybatis行为配置之Ⅲ—其他行为配置项说明

专栏精选 引入Mybatis Mybatis的快速入门 Mybatis的增删改查扩展功能说明 mapper映射的参数和结果 Mybatis复杂类型的结果映射 Mybatis基于注解的结果映射 Mybatis枚举类型处理和类型处理器 再谈动态SQL Mybatis配置入门 Mybatis行为配置之Ⅰ—缓存 Mybatis行为配置…

【数据结构和算法】---二叉树(2)--堆的实现和应用

目录 一、堆的概念及结构二、堆结构的实现2.1堆向下调整算法2.2堆向上调整算法2.3删除堆顶元素2.4插入元素2.5其他函数接口 三、堆结构的应用3.1堆排序3.2Top-k问题 四、堆概念及结构相关题目 一、堆的概念及结构 如果有一个数字集合,并把它的所有元素按完全二叉树…

水库大坝安全监测设计与施工经验

随着我国的科技水平不断上升,带动了我国的水电建设向更高层次发展。目前,我国的水电站大坝已有上百座,并且大坝安全检测仪器质量与先进技术不断更新发展,如今水电站大坝数据信息采集与观测资料分析,能够有效提高水库大…

C语言编程入门 – 编写第一个Hello, world程序

C语言编程入门 – 编写第一个Hello, world程序 C Programming Entry - Write the first application called “Hello, world!” By JacksonML C语言编程很容易! 本文开始,将带领你走过C语言编程之旅,通过实例使你对她颇感兴趣,一…

openGauss学习笔记-176 openGauss 数据库运维-实例主备切换

文章目录 openGauss学习笔记-176 openGauss 数据库运维-实例主备切换176.1 操作场景176.2 操作步骤176.3 示例176.4 错误排查176.5 异常处理 openGauss学习笔记-176 openGauss 数据库运维-实例主备切换 176.1 操作场景 openGauss在运行过程中,数据库管理员可能需要…

mongodb聚合_删除_可视化工具

3.5 MongoDB中limit和skip MongoDB Limit() 方法 如果你需要在MongoDB中读取指定数量的数据记录,可以使用MongoDB的Limit方法,limit()方法接受一个数字参数,该参数指定从MongoDB中读取的记录条数。limit()方法基本语法如下所示:…

听GPT 讲Rust源代码--src/tools(31)

File: rust/src/tools/clippy/clippy_lints/src/matches/redundant_guards.rs rust/src/tools/clippy/clippy_lints/src/matches/redundant_guards.rs这个文件是Clippy的一个Lint规则,用于检查在模式匹配中是否存在冗余的守卫条件(guard)。 在…

英语中修饰头发的形容词顺序是怎么样的(加补充)

一、英语描述发型 :漂亮长短形状颜色头发。 例如她有一头美丽的黑色的直发。She has beautiful long straight black hair.二、多个形容词修饰同一名词时的顺序是固定的,其顺序为:①冠词、指示代词、不定代词、物主代词②序数词基数词③一般性描绘形容词…

蓝牙简学(一)

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 一、蓝牙广播二、通过设备广播数据三、蓝牙广播类型四、蓝牙状态切换 一、蓝牙广播 1、低功耗蓝牙一共有40个信道,频段范围从2402MHz到2480Mhz&#xf…

idea的pom.xml文件灰色删除线解决办法

以上是点击了移除module后就变成这样 如果再次对着已移除的module右键会发现有个delete,点击这个是真删了,要谨慎备份哦 解决方案:恢复误操作remove module的解决方法 idea最右边,有个Maven控件,找到要恢复的module&a…

连理:保险中的实名DID创新应用

2023年12月12日,BSN实名DID服务发布会在北京成功举办,会上正式发布了BSN实名DID服务。这一服务充分融合了BSN区块链服务网络和CTID数字身份链两大基础设施,满足“前台匿名、后台实名”的管理要求,对服务数字经济发展、支撑国家数据…

TiDB 7.1 多租户在中泰证券中的应用

本文详细介绍了中泰证券在系统国产化改造项目中采用 TiDB 多租户技术的实施过程。文章分析了中泰证券数据库系统现状以及引入 TiDB 资源管控技术的必要性,探讨了 TiDB 多租户的关键特性,并阐述了在实际应用中的具体操作步骤。通过该技术的应用&#xff0…

bat命令清理Window应用注册表(Unity开发Window应用)

bat命令清理Window应用注册表(Unity开发Window应用) 介绍出现的问题方案一方案二方案二解决方案1. 首先使用【Win】【R】组合快捷键,快速打开运行命令框,在打开后面键入命令:【Regedit】2. 完后后按回车键(…

华为发布的工业软件三大难题: 面向装配场景,10万+零件的超大规模几何约束系统的求解问题

华为发布的工业软件三大难题: 面向装配场景,10万零件的超大规模几何约束系统的求解问题。 一方面是算法改进, 另一方面是对云几何内核的需求:并行计算、分布式、缓存、集群等云计算技术对CAD系统的辅助提升。 云几何内核可以(/需要能)支撑…

HTML+CSS+JS网页设计期末课程大作业 web课程设计 web前端开发 网页规划与设计

HTMLCSSJS网页设计期末课程大作业 web前端开发技术 web课程设计 网页规划与设计 💥 文章目录一、🚩 网站描述二、🎌 网站介绍三、🏴 网站类型A 个人博客主题B 人物明星主题C 旅游主题D 游戏主题E 动漫主题F 美食主题G 校园主题H 企…

GPT编程(1)八分类图像数据集转换为二分类

一个核心问题就是要将这八类数据图片全部重命名,尝试了一步到位 有一个图像数据集,有八个类别amusement,anger,awe,contentment,disgust, excitement, fear,sadness的图片,每张图片被命名为“类别数字”。采用遍历的方式,按顺序阅…

每天坐在电脑前10小时的投资者的现货黄金投资秘密

很多人在现货黄金市场中苦作舟,希望通过交易、实践来找出市场中的奥秘。笔者最近看了一个每天坐在电脑面前十个小时以上做分析和投资的投资者的经验介绍,他道出了一些投资的秘密,笔者认为,这是适合现货黄金投资者借鉴和学习的&…

7.7复原IP地址(LC93-M)

算法: 根据题意 有效的 IP 地址 : (1)由四个整数构成 (2)每个整数位于 0 到 255 之间 (3)每个整数不能含有前导 0,如011、021等,但是可以有单独的一个“…