Python爬虫自动化从入门到精通第10天(Scrapy框架的基本使用)

news2024/11/28 3:40:26

Scrapy框架的基本使用

  • Scrapy框架简介
  • Scrapy框架的运作流程
  • 安装Scrapy框架
  • Scrapy框架的基本操作
  • Scrapy常用命令

Scrapy框架简介

Scrapy框架主要包含以下组件:

  • Scrapy Engine(引擎):负责Spiders、Item Pipeline、Downloader、Scheduler之间的通信,包括信号和数据的传递等。
  • Scheduler(调度器):负责接受引擎发过来的Request请求,并按照一定的方式进行整理排队和入队,当引擎需要时,交还给引擎。
  • Downloader(下载器):负责下载Scrapy Engine发送的所有Request(请求),并将获取到的Responses(响应)交还给Scrapy Engine,由Scrapy Engine交给Spider来处理。
  • Spider(爬虫):负责处理所有Responses,从中分析提取数据,获取Item字段需要的数据,并将需要跟进的URL提交给引擎,再次进入Scheduler。
  • Item Pipline(管道):负责处理Spider中获取到的Item数据,并进行后期处理(详细分析、过滤、存储等)。
  • Downloader Middlewares(下载中间件):是一个可以自定义扩展下载功能的组件。
  • Spider Middlewares(Spider中间件):是一个可以自定义扩展Scrapy Engine和Spiders中间通信的功能组件(例如:进入Spiders的Responses和从Spiders出去的Requsets)。

这些组件的合作,共同完成整个爬取任务。

Scrapy框架的运作流程

Scrapy的运作流程由引擎控制,其过程如下:
1)引擎向Spiders请求一个或多个要爬取的URL
2)引擎从Spiders中获取到第一个要爬取的URL,封装成Request并给调度器
3)引擎向调度器请求第一个要爬取的Request
4)调度器返回第一个要爬取的Request给引擎,引擎将Request通过下载中间件转发给下载器
5)一旦页面下载完毕,下载器便会生成一个该页面的Response,并通过下载中间件发送给引擎,如果这个Request下载失败,下载器将失败的信号返回给引擎,然后引擎告诉调度器,待会再进行下载
6)引擎从下载中间件中接受到Response并通过Spider中间件发送给Spider处理
7)Spider处理Response并返回爬取到的Item及新的Request给调度器
8)引擎将爬取到的Item给Item Pipline进行处理,并将这个Requset发送给调度器进行处理
9)从第2步开始重复,直到调度器中没有更多的Request

安装Scrapy框架

直接通过命令进行安装:pip install scrapy -i https://pypi.douban.com/simple后面加的时豆瓣源,安装的速度可以快一点。

输入【scrapy】显示如下界面就说明安装成功了

在这里插入图片描述

此时为了更加方便的使用我们的Scrapy框架,使下载速度更加流畅通顺,我们还需要安装【Twisted】异步网络框架来处理网络通信。

Twisted异步网络框架的下载安装

在这里插入图片描述

将Twisted安装文件下载到本地后,复制我们需要安装的版本的名字,在下载的Twisted文件夹中进入终端输入:pip install Twisted‑20.3.0‑cp39‑cp39‑win_amd64.whl

在这里插入图片描述

当显示这个界面时说明已经安装完成了

在这里插入图片描述

此时我们还需要安装【itemadapter】这个在我们创建框架的时候能用上,直接使用:pip install itemadapter -i https://pypi.douban.com/simple命令进行安装

在这里插入图片描述

Scrapy框架的基本操作

使用Scrapy框架制作爬虫一般需要一下步骤:
1)新建项目(Scrapy startproject xxx):创建一个新的爬虫项目
2)明确目标(编写items.py):明确想要爬取的目标
3)制作爬虫(spiders/xxspiser.py):制作爬虫,开始爬取网页
4)存储数据(pipelines.py):存储爬取内容(一般通过管道进行)

  • 新建项目
    新建一个文件夹,右击打开终端输入scrapy startproject testScrapy(这是项目名称)显示以下界面说明成功了
    在这里插入图片描述
    此时我们打开文件夹会出现下面这些.py文件

在这里插入图片描述
下面简单介绍以下这些文件的作用:
1) spiders:存储爬虫代码的目录
2) items.py:实体文件,用于定义项目的目标实体
3) middlewares.py:中间文件,用于定义Spider中间件
4) pipelines.py:管道文件,用于定义项目使用的管道
5) settings.py:设置文件,用于存储项目的设置信息

  • 明确爬取目标
    下面以知乎网页为例,爬取用户的名字和简介:

在这里插入图片描述

Scrapy使用Item(实体)来表示要爬取的数据。Item定义结构化数据字段,类似于Python中的字典dict,但是提供了一些额外的保护以减少错误。

Scrapy框架提供了基类scrapy.Item用来表示实体数据,一般需要创建一个继承自scrapy.Item的子类,并为该子类添加类型为scrapy.Field的类属性来表示爬虫项目的实体数据(可以理解成类似于ORM的映射关系)。

在Pycharm中打开mySpider目录下的items.py文件,可以看到Scrapy框架已经在items.py文件中自动生成了继承自scrapy.Item的MyspiderItem类。用户只需要修改MyspiderItem类的定义,为他添加属性即可。代码如下:

import scrapy

class TestscrapyItem(scrapy.Item):
    # define the fields for your item here like:
    # name = scrapy.Field()
    
    # 创建属性name,为用户名
    name = scrapy.Field
    
    # 创建属性title,为简介
    title = scrapy.Field
  • 制作Spiders爬取网页

使用Scrapy框架制作爬虫的第三步就是制作Spiders,也就是负责爬取和提取数据的爬虫。通常把制作Spiders分为3个步骤实现,分别是创建爬虫、运行爬虫以爬取网页和提取数据。

1)创建爬虫
首先要在项目中创建一个爬虫,创建爬虫的命令格式如下:

scrapy genspider 爬虫名称“爬虫域”

在创建爬虫的命令,需要为爬虫起一个名称,并规定该爬虫要爬取的网页域范围,也就是爬取域。

打开终端,来到当前目录的子目录spiders中,使用创建爬虫的命令创建一个名为itcast的爬虫,并指定爬取域的范围为zhihu.com代码如下:

scrapy genspider zhihui “zhihui.com”

在这里插入图片描述

这是执行完命令后的反馈

在这里插入图片描述

此时spiders文件中会增加一个刚刚命名的 zhihui.py文件

在这里插入图片描述

我们可以自己创建zhihui.py文件中的代码,只是使用命令可以免去编写固定代码的麻烦,从代码中可以看到自动创建的爬虫类名称ZhihuiSpider,它继承自scrapy.Spider类。scrapy.Spider是Scrapy提供的爬虫基类,用户创建的爬虫类都需要从该类继承,爬虫类中需要定义三个属性(name、allowed_domains、start_urls)和一个方法(parse)

1)name属性:表示这个爬虫的识别名称。爬虫的名称必须是唯一的,不同的爬虫需要定义不同的名称。
2)allow_domains属性:表示爬虫搜索的域名范围,也就是爬虫的约束区域。该属性规定爬虫只能爬取这个域名下的网页,不在该域名下的URL会被忽略。
3)start_urls属性:表示爬取的起始URL元组或列表。爬虫第一次下载的数据将会从这个URL开始,其他URL将会从这些起始URL中继承性的生成。
4)parse(self,response)方法:用于解析网络响应。该方法在每个初始URL完成下载后被调用,调用时传入从该URL返回的Response对象作为唯一的参数。

parse()方法主要有解析返回的网页数据(response.body),提取结构化数据(生成item)和生成访问下一页数据的URL请求。

下面对生成的ZhihuiSpider类进行自定义修改,首先将start_urls的值修改为需要爬取的第一个URL:

# 这是个元组,括号的逗号不能省略,列表也可以

start_urls = ("https://www.zhihu.com/question/594331966/answer/2980422269",)

然后我们修改parse()方法,在该方法中将响应信息转换成文本,保存在test.html文件中:

在这里插入图片描述
2)运行爬虫
ZhihuiSpider类的代码修改完成后,就可以运行zhihui爬虫来爬取网页。运行爬虫的命令格式如下:

scrapy crawl 爬虫名称

在终端中进入zhihui.py文件所在的目录,输入scrapy crawl zhihui,这里的zhihui就是使用scrapy genspider命令时确定的爬虫名称。

在这里插入图片描述
显示以下界面说明成功了

在这里插入图片描述

  • 提取数据
    前面两个步骤已经成功爬取到了网页源码,下面就可以从源代码中提取数据,要提取数据首先需要观察页面源代码,定位目标数据,分析和了解目标数据的展示结构,之后,我们就可以使用我们的Scrapy支持的Xpath解析方式进行数据提取,这时需要修改parse()方法,修改完成之后,在命令行使用scrapy crawl zhihui再次运行爬虫,就可以看到控制台打印出获取到的讲师的信息。

  • 永久性存储数据
    使用Scrapy框架制作爬虫的最后一步就是将获取到的目标数据进行永久性的存储,Scrapy保存数据最简单的方法有四种:

# 输出JSON格式,默认为Unicode编码
scrapy crawl 项目名 -o 文件名.json

# 输出JSON Lines格式,默认为Unicode编码
scrapy crawl 项目名 -o 文件名.jsonl

# 输出CSV格式,使用逗号表达式,可用Excel打开
scrapy crawl 项目名 -o 文件名.csv

# 输出XML格式
scrapy crawl 项目名 -o 文件名.xml

如果要对导出数据的编码格式进行设置,可以在Scrapy的管道(Item Pipeline)中进行。

Scrapy常用命令

命令用途命令格式
创建项目scrapy startproject 项目名称
创建爬虫scrapy genspider 爬虫域
运行爬虫scrapy crawl 爬虫名称
保存数据scrapy crawl 爬虫名称 -o 文件名.格式

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

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

相关文章

手把手教你安装Visual Studio 2019(史上最全)

前言: 本文是以Visual Studio Community 2019为例子,介绍如何在微软官网下载Visual Studio Community 2019并安装.net桌面开发程序环境(主要是winform开发环境)。 下载请点击这里Visual Studio Community 2019下载,然后点击下图的箭头的DownLoad下载,要注意的是下载时要…

微信自定义菜单

系列文章目录 提示:这里可以添加系列文章的所有文章的目录,目录需要自己手动添加 例如:第一章 Python 机器学习入门之pandas的使用 提示:写完文章后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目…

全链路压测时动态路由数据源MySQL、MongoDB、Redis

目录 一、全链路压测 二、动态路由Mysql 1. 参数配置application-localDynamic.yml 2. 加载配置参数DynamicDataSourceProperties.java 3. 动态数据源DynamicDataSource.java 4. 动态数据源供应DynamicDataSourceProvider.java 5. 动态数据源bean 6. 动态数据源上下文D…

PWN-ret2shellcode原理

我们之前做过很简单的pwn题目 buuctf-rip这种 是在程序中存在shellcode 直接返回地址改为这个shellcode的地址即可 但是如果程序里面没有呢 这种类型就是ret2shellcode 常见的shellcode shellcode "\x31\xf6\x48\xbb\x2f\x62\x69\x6e\x2f\x2f\x73\x68\x56\x53\x54\x5…

一起读源码 —— Fastjson 的核心方法及其实现原理

源码介绍 Fastjson 是阿里巴巴开源的一个 Java 工具库,它常常被用来完成 Java 的对象与 JSON 格式的字符串的相互转化。 此文读的源码是撰写此文时 Fastjson 的最新的发布版本,即 1.2.83 下载源码 请前去 github 找到 release 最新版下载后解压&…

智慧水务之排水系统物联网监测

1.1排水系统 1.1.1监测范围选择依据 (1)管网老化、设计标准低、合流制管网区域 管网建设年代久远,通常管网发生破损问题较大;管网设计标准较低,易引发淤堵或溢流;合流制管网受天气影响大,会对…

FFMPEG: [ API ] >打开/关闭一个输入文件

它们是成对出现的. ffmpeg 把输入文件--转换成--->AVFormatContext实例 ◆ avformat_open_input() int avformat_open_input(AVFormatContext ** ps,const char * url,ff_const59 AVInputFormat * fmt,AVDictionary ** options )Open an input stream and read the header.…

跨越语言的艺术:Weblogic序列化漏洞与IIOP协议

0x01 概述 Weblogic 的序列化漏洞主要依赖于 T3 和 IIOP 协议,这两种协议在通信交互的过程中存在如跨语言、网络传输等方面的诸多问题,会给漏洞的检测和利用带来许多不便。在白帽汇安全研究院的理念中,漏洞检测和利用是一项需要创造性的工作…

速锐得新能源电动汽车整车能耗热管理CAN总线模块开发方案

一、新能源时代背景 新能源汽车浪潮席卷而来,随着汽车向电动化和智能化方向发展,对汽车能量管理的要求也越来越高。而直冷直热热泵空调热管理系统是新能源汽车领域的新蓝海,随着热管理系统的崛起,在整车能耗热管理采集模块开发方…

计算机组成原理——第四章指令系统(下)

本是青灯不归客,却因浊酒恋红尘 文章目录前言4.3.1 高级语言与机器级代码之间的对应4.3.2 常用的X86汇编指令4.3.3 ATu0026T格式和Intel格式4.3.4 选择语句的机器级表示4.3.5 循环语句的机器级表示4.4 CiSC和RiSC前言 接下来这部分主要讲的就是高级语言与汇编语言的…

Thymeleaf select回显并选中多个

语法: selected"selected" 或 selectedtrue ${#strings.indexOf(name,frag)} 或者 ${#lists.contains(list, element)} 或者 ${#strings.contains(name,ez)} 或者 ${#strings.containsIgnoreCase(name,ez)} 都可以实现。 多选示例 : &…

linux 集群时间同步

前言 由于搭建hadoop集群需要进行集群时间同步,记录下具体操作过程。 这里我的集群环境为192.168.184.129(主)、192.168.184.130(从)、192.168.184.131(从),设置从机器从主机器同步…

Windows XP设置Outlook电子邮箱

一、问题描述 在Windows XP操作系统中进行Outlook电子邮箱的设置。 二、具体步骤 1、点击“开始”,找到“电子邮件(Outlook Express)并点击: 2、点击“设置邮件账户”。 3、输入自己的姓名,点击“下一步”。 4、…

Hive UDTF、窗口函数、自定义函数

目录 1 UDTF 1.1 概述 1.2 explode 1.3 posexplode 1.4 inline 1.5 Lateral View 2 窗口函数(开窗函数) 2.1 定义 2.2 语法 2.2.1 语法--函数 2.2.2 语法--窗口 2.2.3 常用窗口函数 3 自定义函数 3.1 基本知识 3.2 实现自定义函数 3.2.1 …

RestClient操作文档

RestClient操作文档5.RestClient操作文档5.1.新增文档5.1.1.索引库实体类5.1.2.语法说明5.1.3.完整代码5.2.查询文档5.2.1.语法说明5.2.2.完整代码5.3.删除文档5.4.修改文档5.4.1.语法说明5.4.2.完整代码5.5.批量导入文档5.5.1.语法说明5.5.2.完整代码5.6.小结5.RestClient操作…

JavaSE学习进阶day04_02 Calendar类

第三章 Calendar类 3.1 概述 java.util.Calendar类表示一个“日历类”,可以进行日期运算。它是一个抽象类,不能创建对象,我们可以使用它的子类:java.util.GregorianCalendar类。 有两种方式可以获取GregorianCalendar对象&#…

《Advanced R》学习笔记 | Chapter3 Vectors

专注系列化、高质量的R语言教程推文索引 | 联系小编 | 付费合集本篇推文是学堂君学习第3章“Vectors”的笔记,原文链接是https://adv-r.hadley.nz/vectors-chap.html,可在文末“阅读原文”处直达。通过本章的学习,我们可以更清晰地理解R语言中…

IDPChat:探索基于LLaMA和Stable Diffusion的「开源」中文多模态AI大模型

中文多模态模型 IDPChat 和大家见面了。 随着GPT4、文心一言等的发布,预训练大模型正式开启由单模态向多模态模型演进。多模态的特性为语言模型带来更加丰富的应用场景。 我们认为,未来的AI应用将主要以大模型为核心基石。 而在大模型的领域,…

PFTL101A 2.0KN 3BSE004172R1控制卷取物体时保持物体相互拉长或者绷紧的力

PFTL101A 2.0KN 3BSE004172R1控制卷取物体时保持物体相互拉长或者绷紧的力 ​ 基于单片机的放卷机张力控制系统设计 张力控制,通俗地讲,就是要控制卷取物体时保持物体相互拉长或者绷紧的力。张力应用于最广泛的造纸、纤维、塑料薄膜、电线、印刷品、磁带…

基于SpringBoot的健身房管理系统

有需要请私信或看评论链接哦 可远程调试 基于SpringBoot健身房管理系统一 介绍 此健身房管理系统基于SpringBoot开发,数据库mysql,前端startbootstrap。系统角色分为用户和管理员。用户登录后可查看个人信息,课程报名和课程查询,…