【Python从入门到进阶】44、Scrapy的基本介绍和安装

接上篇《43.验证码识别工具结合requests的使用》
上一篇我们学习了如何使用验证码识别工具进行登录验证的自动识别。本篇我们开启一个新的章节,来学习一下快速、高层次的屏幕抓取和web抓取框架Scrapy。

一、Scrapy框架的背景和特点


Scrapy框架是一个为了爬取网站数据,提取结构性数据而编写的应用框架,可以应用在包括数据挖掘,信息处理或存储历史数据等一系列程序中。
那么什么是结构化数据?举个例子,例如电子书网站的网页,里面有很多书籍的信息:

打开源码后,可以看到每个书籍都是由<li></li>标签包裹的,结构是高度重复且一致的,这种数据就称之为“结构性数据”:

Scrapy框架对这种结构性数据有着很强的处理能力。
Scrapy框架具有简单易用、高效稳定、功能强大等特点,它采用了异步IO和事件驱动的设计模式,使得其可以轻松地处理大量并发请求,提高抓取效率。同时,Scrapy框架还提供了丰富的数据处理和输出功能,方便用户进行数据清洗、分析和可视化等工作。

与其他网络爬虫框架相比,Scrapy框架具有以下优势:

简单易用:Scrapy框架提供了丰富的文档和教程,使得用户可以快速上手;
高效稳定:Scrapy框架采用了异步IO和事件驱动的设计模式,能够处理大量并发请求,提高抓取效率;
功能强大:Scrapy框架提供了丰富的数据处理和输出功能,方便用户进行数据清洗、分析和可视化等工作;
社区活跃:Scrapy框架拥有庞大的用户群体和活跃的社区,方便用户交流和学习。

二、Scrapy框架的基本概念和原理


Scrapy框架的基本概念包括Item、Spider、Pipeline、Scheduler、Downloader、Engine等。其中,Item是数据模型,用于存储抓取到的数据;Spider是爬虫类,用于定义如何抓取数据;Pipeline是数据处理管道,用于对抓取到的数据进行清洗、分析和存储等工作;Scheduler是调度器,用于管理请求队列;Downloader是下载器,用于下载网页内容;Engine是引擎,用于协调各个组件的工作。

Scrapy框架的工作原理:

注:图片来自[寻_觅]博主
用户通过编写Spider类来定义如何抓取数据,然后Spider将请求发送给Scheduler,Scheduler将请求放入队列中等待处理。当Engine接收到请求后,它会通过Downloader下载网页内容,并将内容传递给Spider进行处理。Spider将处理后的数据传递给Pipeline进行进一步的处理和分析。同时,Engine还会协调各个组件的工作,确保整个抓取过程的顺利进行。

三、Scrapy框架的适用场景

Scrapy框架是一个功能强大的Python库,专为数据抓取和网页爬取而设计。它适用于各种应用场景,以下是Scrapy框架的一些主要适用场景:

1、数据挖掘和数据分析:Scrapy框架可以快速抓取大量网页数据,提取所需信息并将其存储在数据库中,供后续分析和挖掘使用。这种能力使得Scrapy在数据挖掘和数据分析领域非常有用。
2、监测网站变化:Scrapy可以定期抓取特定网站的数据,并对比新旧数据之间的差异。这种能力可以用于监测网站更新、新闻发布或其他变化。
3、收集公共数据:许多政府和公共机构公开了大量数据,使用Scrapy框架可以轻松地抓取这些数据并进行分析。例如,抓取天气预报、交通信息或公共安全数据等。
4、聚合新闻和博客文章:Scrapy可以用来抓取新闻网站、博客等网站的最新文章,并将它们聚合到一个平台上进行展示。
5、在线商店爬取:在线商店通常包含大量产品信息和价格信息。使用Scrapy框架可以快速抓取这些信息,并通过比价引擎为用户提供最优惠的商品推荐。
6、社交媒体抓取:社交媒体网站(如Twitter、Facebook等)提供了丰富的用户数据。通过Scrapy框架,可以抓取这些数据并进行分析,以便了解公众舆论、用户行为等。
7、个性化推荐系统:通过抓取用户感兴趣的网页内容,Scrapy可以帮助构建个性化的推荐系统。这些推荐可以基于用户的浏览历史、兴趣爱好或其他相关因素。
8、网页结构分析和可视化:Scrapy可以用于分析网页的结构和布局,帮助用户更好地理解网页的组织方式。此外,通过使用Scrapy的内置可视化工具,还可以轻松地将网页呈现为可读性更高的HTML或XML格式。
9、网络日志分析:企业可以使用Scrapy框架抓取和分析他们的网络日志数据,以获取有关网站流量、用户行为和其他有用信息的洞察。
总之,Scrapy框架适用于需要从互联网上抓取和分析大量数据的各种场景。无论是学术研究、商业应用还是个人项目,Scrapy都是一个强大而灵活的工具,可以帮助用户轻松地实现网页爬取任务。

四、Scrapy框架的安装与配置

1、安装Scrapy框架

在安装Scrapy之前,需要确保你的Python环境已经配置好。Scrapy框架的安装相对简单,可以通过pip命令进行安装。以下是安装Scrapy的步骤:
(1)打开终端或命令提示符,输入以下命令安装Scrapy:

pip install scrapy


(2)等待安装完成。安装完成后,可以通过输入scrapy --version命令来验证Scrapy是否成功安装,并显示安装的版本号。

2、创建第一个Scrapy项目

安装完Scrapy后,我们可以创建一个新的Scrapy项目。以下是创建Scrapy项目的步骤:
(1)在终端或命令提示符中,导航到你想要创建项目的目录。
(2)输入以下命令创建一个新的Scrapy项目:

scrapy startproject myproject


其中,myproject是你想要给项目起的名称。注意,项目名字不允许使用数字开头,也不能包含中文。
(3)执行上述命令后,Scrapy将会在当前目录下创建一个名为myproject的文件夹,并在其中生成一些基本的文件和目录结构:

(4)目录结构介绍

3、Scrapy项目配置详解

在Scrapy项目中,有一个重要的配置文件settings.py,用于配置项目的各种参数和设置:

以下是一些常见的配置选项及其说明:

●ROBOTSTXT_OBEY:默认为True,表示遵守网站的robots.txt规则。如果设置为False,则忽略robots.txt文件。
●USER_AGENT:用于设置爬虫的User-Agent,可以伪装成不同的浏览器或其他客户端。
●CONCURRENT_REQUESTS:同时进行的最大请求数。可以根据需要进行调整,以充分利用系统资源。
●DOWNLOAD_DELAY:下载器在连续请求之间的延迟时间(秒)。可以用来限制爬取速度,以避免对目标网站造成过大负担。
●ITEM_PIPELINES:定义项目使用的数据处理管道。可以在这里指定自定义的Pipeline类。
●LOG_LEVEL:日志级别设置,可以选择不同的日志输出级别,如DEBUG、INFO、WARNING等。
●DUPEFILTER_CLASS:用于处理重复请求的过滤器类。可以自定义过滤器类,以便更灵活地处理重复请求。
●COOKIES_ENABLED:是否启用Cookie处理。默认为True,表示启用Cookie处理。如果设置为False,则不处理Cookie。
●HTTPCACHE_ENABLED:是否启用HTTP缓存。默认为False,表示不启用HTTP缓存。如果设置为True,则启用HTTP缓存功能,可以加速对相同网页的爬取速度。

五、Scrapy命令行工具的使用

Scrapy提供了一套命令行工具,方便用户进行项目的创建、运行和调试等操作。以下是一些常用的Scrapy命令行工具及其功能:
●scrapy startproject <project_name>:创建一个新的Scrapy项目。
这个命令刚刚我们已经创建了一个项目了,这里不再赘述。
●scrapy genspider <spider_name> <domain>:生成一个新的Spider爬虫类。
我们刚刚创建完工程后,仅仅是将框架工程搭建好了,我们具体要爬取的网络的逻辑,还是需要我们自己编写的,所以我们需要在spiders文件夹下创建我们的爬虫程序,这里的“spider_name”是爬虫文件的名字,而<domain>是我们要爬取的网页。
例如我们要爬取百度首页,我们进入spiders文件夹下输入以下命令:

scrapy genspider baidu www.baidu.com

注:这里域名不需要加“https://”,因为文件内会自动拼接http头。
可以看到spiders文件夹下生成了一个名为“baidu.py”的文件:

文件内容为:

import scrapyclass BaiduSpider(scrapy.Spider):# 爬虫的名字,用于运行爬虫的时候,使用的值name = "baidu"# 允许访问的域名allowed_domains = ["www.baidu.com"]# 起始的Url地址,指的是第一次要访问的域名start_urls = ["https://www.baidu.com"]# 是执行了start_urls之后,执行的方法# 方法中的response就是返回的那个对象# 相当于 response = urllib.request.urlopen()# 或    response = requests.get()def parse(self, response):pass

最后一句pass语句是python中的占位符,它没有实际作用,但可以保证程序正常运行,允许我们以后再来实现具体的功能。
这里我们将pass修改为一个print语句,用来检验我们的爬虫是否执行成功。

print("我的第一个爬虫")

●scrapy crawl <spider_name>:运行指定的Spider爬虫类进行爬取任务。
编写完爬虫后,我们需要使用crawl命令来执行我们的爬虫文件,spider_name就是我们上面创建的爬虫程序:

scrapy crawl baidu

效果:

这里看到爬取被拒绝了,是因为百度的robots.txt不允许我们爬取该页面。这里解释一下robots.txt,它是一个“君子协议”,该文件规定了搜索引擎抓取工具可以访问网站上的哪些网址,并不禁止搜索引擎将某个网页纳入索引。
我们可以输入“https://www.baidu.com/robots.txt”地址,来查看百度的爬虫允许规则:

可以看到包含“baidu”在内的域名都不允许爬取。

那怎么办呢?我们可以设置settings.py中设置“ROBOTSTST_OBEY”参数为False,表示不遵循网站的反爬虫协议,这样就可以爬取相关页面了(当然这里不提倡哈,大家知道就好):

再运行一次爬虫程序,可以看到我们的print内容已经打印出来了:

●scrapy list:列出当前项目中可用的Spider爬虫类。

还有以下指令,大家需要的话可以自己详细了解下:
●scrapy fetch <url>:下载指定的网页内容,并显示其内容和相关信息。
●scrapy view <url>:在浏览器中打开指定的网页链接,方便用户查看网页结构和样式等信息。
●scrapy shell <url>:启动一个交互式的Scrapy Shell环境,方便用户进行网页的调试和测试。

关于Scrapy的基本介绍和安装已经全部讲解完毕了,下一篇我们详细讲解一下Scrapy框架的核心组件。

参考:尚硅谷Python爬虫教程小白零基础速通
转载请注明出处:https://guangzai.blog.csdn.net/article/details/135043242

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C++内存布局

温故而知新&#xff0c;本文浅聊和回顾下C内存布局的知识。 一、c内存布局 C的内存布局主要包括以下几个部分&#xff1a; 代码段&#xff1a;存储程序的机器代码。.数据段&#xff1a;存储全局变量和静态变量。数据段又分为初始化数据段&#xff08;存储初始化的全局变量和…

python与机器学习2,激活函数

目录 1 什么是激活函数&#xff1f; activation function 1.1 阈值 1.2 激活函数a(x) &#xff0c;包含偏置值θ 1.3 激活函数a(x) &#xff0c;包含偏置值b 2 激活函数1: 单位阶跃函数 2.1 函数形式 2.2 函数图形 2.3 函数特点 2.4 代码实现这个 单位阶跃函数 3 激活…

Convolutional Neural Network(CNN)——卷积神经网络

1.NN的局限性 拓展性差 NN的计算量大性能差&#xff0c;不利于在不同规模的数据集上有效运行若输入维度发生变化&#xff0c;需要修改并重新训练网络容易过拟合 全连接导致参数量特别多&#xff0c;容易过拟合如果增加更多层&#xff0c;参数量会翻倍无法有效利用局部特征 输入…

结构型设计模式(三)享元模式 代理模式 桥接模式

享元模式 Flyweight 1、什么是享元模式 享元模式的核心思想是共享对象&#xff0c;即通过尽可能多地共享相似对象来减少内存占用或计算开销。这意味着相同或相似的对象在内存中只存在一个共享实例。 2、为什么使用享元模式 减少内存使用&#xff1a;通过共享相似对象&#…

汽车UDS诊断——SecureDataTransmission 加密数据传输(0x84)

诊断协议那些事儿 诊断协议那些事儿专栏系列文章,本文介绍诊断和通讯管理功能单元下的84服务SecureDataTransmission,在常规诊断通信中,数据极易被第三方获取,所以在一些特殊的数据传输时,标准定义了加密数据传输的服务。 简而言之,就是在发送诊断数据时,发送方先把数…

fragstats:景观指数的时间序列分析框架

作者&#xff1a;CSDN _养乐多_ 本文将介绍景观指数的时间序列分析计算的软件使用方法和 python 代码&#xff0c;该框架可用于分析景观指数时间序列图像的趋势分析、突变分析、机器学习&#xff08;分类/聚类/回归&#xff09;、相关性分析、周期分析等方面。 文章目录 一、…

智能优化算法应用:基于人工电场算法3D无线传感器网络(WSN)覆盖优化 - 附代码

智能优化算法应用&#xff1a;基于人工电场算法3D无线传感器网络(WSN)覆盖优化 - 附代码 文章目录 智能优化算法应用&#xff1a;基于人工电场算法3D无线传感器网络(WSN)覆盖优化 - 附代码1.无线传感网络节点模型2.覆盖数学模型及分析3.人工电场算法4.实验参数设定5.算法结果6.…

04-Revision和流量管理

1 Revision 关于Revision 应用程序代码及相关容器配置某个版本的不可变快照KService上的spec.template的每次变动&#xff0c;都会自动生成一个新的Revision通常不需要手动创建及维护 Revision的使用场景 将流量切分至不同版本的应用程序间&#xff08;Canary Deployment、Blu…

静态路由及动态路由

文章目录 静态路由及动态路由一、静态路由基础1. 静态路由配置2. 负载分担3. 路由备份4. 缺省路由5. 静态路由实操 二、RIP 动态路由协议1. RIP 协议概述2. RIP 协议版本对比2.1 有类路由及无类路由 3. RIP 路由协议原理4. RIP 计时器5. 度量值6. 收敛7. 示例 静态路由及动态路…

Kafka基本原理及使用

目录 基本概念 单机版 环境准备 基本命令使用 集群版 消息模型 成员组成 1. Topic&#xff08;主题&#xff09;&#xff1a; 2. Partition&#xff08;分区&#xff09;&#xff1a; 3. Producer&#xff08;生产者&#xff09;&#xff1a; 4. Consumer&#xff08;…

使用TensorRT对Yolov5进行部署【基于Python】

如果还未配置TensorRT&#xff0c;请看这篇博文&#xff1a;Win11下TensorRT环境部署 这里使用TensorRT对Yolov5进行部署流程比较固定&#xff1a;先将pt模型转换为onnx&#xff0c;再将onnx模型转为engine&#xff0c;所以在执行export.py时要将onnx、engine给到include。 P…

Linear Regression线性回归(一元、多元)

目录 介绍&#xff1a; 一、一元线性回归 1.1数据处理 1.2建模 二、多元线性回归 2.1数据处理 2.2数据分为训练集和测试集 2.3建模 介绍&#xff1a; 线性回归是一种用于预测数值输出的统计分析方法。它通过建立自变量&#xff08;也称为特征变量&#xff09;和因变…

【Redis】五、Redis持久化、RDB和AOF

文章目录 Redis持久化一、RDB&#xff08;Redis DataBase&#xff09;触发机制如何恢复rdb文件 二、AOF&#xff08;Append Only File&#xff09;三、扩展 Redis持久化 面试和工作&#xff0c;持久化都是重点&#xff01; Redis 是内存数据库&#xff0c;如果不将内存中的数据…

微服务实战系列之ZooKeeper(实践篇)

前言 关于ZooKeeper&#xff0c;博主已完整的通过庖丁解牛式的“解法”&#xff0c;完成了概述。我想掌握了这些基础原理和概念后&#xff0c;工作的问题自然迎刃而解&#xff0c;甚至offer也可能手到擒来&#xff0c;真实一举两得&#xff0c;美极了。 为了更有直观的体验&a…

uniapp 预览图片

preImg(index){let urls []this.images.map((item,i) > {if(indexi){urls.unshift(item.file_path)}else{urls.push(item.file_path)}})uni.previewImage({urls})}

linux之Samba服务器

环境&#xff1a;虚拟机CENTOS 7和 测试机相通 一、Samba服务器_光盘共享&#xff08;匿名访问&#xff09; 1.在虚拟机CENTOS 7安装smb服务&#xff0c;并在防火墙上允许samba流量通过 2. 挂载光盘 3.修改smb.conf配置文件&#xff0c;实现光盘匿名共享 4. 启动smb服务 5.在…

JVM基础扫盲

什么是JVM JVM是Java设计者用于屏蔽多平台差异&#xff0c;基于操作系统之上的一个"小型虚拟机"&#xff0c;正是因为JVM的存在&#xff0c;使得Java应用程序运行时不需要关注底层操作系统的差异。使得Java程序编译只需编译一次&#xff0c;在任何操作系统都可以以相…

英码科技受邀参加2023计算产业生态大会,分享智慧轨道交通创新解决方案

12月13-14日&#xff0c;“凝心聚力&#xff0c;共赢计算新时代”——2023计算产业生态大会在北京香格里拉饭店成功举办。英码科技受邀参加行业数字化分论坛活动&#xff0c;市场总监李甘来先生现场发表了题为《AI哨兵&#xff0c;为铁路安全运营站好第一道岗》的精彩主题演讲&…

1951 年以来的美国ACIS 气候地图数据集(5 公里空间分辨率)

应用气候信息系统 (ACIS) NRCC NN ACIS是Applied Climate Information System的缩写&#xff0c;是由美国国家气象局&#xff08;NOAA&#xff09;开发的一种气候信息系统。ACIS气候地图是通过收集和整理全球的气象数据&#xff0c;利用计算机技术和数据分析方法生成的气候图表…

计算机组成原理-选择语句和循环语句的汇编表示

文章目录 选择语句jmpjxx示例&#xff1a;选择语句的机器级表示扩展&#xff1a;cmp指令的底层原理 循环语句使用条件转移指令实现循环用loop指令实现循环 选择语句 不一定知道指令的位置&#xff0c;所以jmp直接跳转到指令的位置很难办 jmp 标号相当于位置&#xff0c;名字…