爬虫学习(十九)——Scrapy的学习及其使用

news/2024/7/18 21:35:04 标签: python, 爬虫

Scrapy框架的介绍

Scrapy,非常的强悍,通过python语言编写的,非常知名的爬虫框架

框架工作流程

框架流程图

 

基本工作流程;

1、引擎向spiders要url

2、引擎将要爬取的url给调度器(schedule)

3、调度器(schedule)会将url生成请求对象放入到指定的队列中

4、从队列中抛出一个请求

5、引擎将请求交给下载器进行处理

6、下载器发送请求,获取互联网数据

7、下载器将数据返回给引擎进行处理

8、引擎将数据再次给spiders

9、spiders使用xpath解析该数据,得到数据或url

10、spiders将数据或者url给到引擎

11、引擎判断spiders发送的是url函数数据,将数据交给管道 Item Pipeline,是url交给调度器处理

注意:

scrapy结束工作流程的条件是spiders传给引擎的只剩下数据的时候是流程工作结束的时候

 

Scrapy框架各部分职能

scrapy engine:负责Spider、ItemPipeline、Downloader、Scheduler中间的通讯,信号、数据传递等

Schedule(调度器):它负责接受引擎发送过来的Request请求,并按照一定的方式进行整理排列,入队,当引擎需要时,交还给引擎

downloader(下载器):负责下载Scrapy Engine(引擎)发送的所有Requests请求,并将其获取到的Responses交还给Scrapy Engine(引擎),由引擎交给Spider来处理

Spiders(爬虫):它负责处理所有Responses,从中分析提取数据,获取Item字段需要的数据,并将需要跟进的URL提交给引擎,再次进入Scheduler(调度器)

Item pipeline(管道):它负责处理Spider中获取到的Item,并进行进行后期处理(详细分析、过滤、存储等)的地方

 

Scrapy框架的使用

基本使用:

1、关于scrapy框架,我们只需要关注spiders即可,爬虫的代码也是写到了spiders里面

2、管道是用来处理数据的,框架为我们留下接口,只需要实现接口即可

创建工程项目

1、通过指令创建项目:scrapy startproject xxx

2、通过指令创建文件

①cd 目标文件

②scrapy genspider name  www.xxx.com

参数解释:

name:爬虫的名字,启动时根据爬虫的名字启动项目

allowed_domains:允许的域名,就是爬取的时候这个请求要不要发送,如果是允许该域名之下的url,就会发送,如果不是,则过滤掉这个请求,这是一个列表,可以写多个允许的域名

start_urls:爬虫的起始url,是一个列表,可以传递多个起始的url

def parse(self,response) :parse函数名是固定的,当收到下载数据的时候,就会自动调用这个方法;response是该函数的第二个参数,是一个响应对象,从该对象中回去HTML字符串,然后解析

注意:parse函数返回的必须是一个可迭代的对象

定制item.py

打印response对象

命令:scrapy crawl name

运行

命令:scrapy crawl name -o  filename

转载于:https://www.cnblogs.com/kuangkuangduangduang/p/10433379.html


http://www.niftyadmin.cn/n/572455.html

相关文章

springboot不同环境打包

1. 场景描述 springbootmaven打包&#xff0c;项目中经常用到不同的环境下打包不同的配置文件&#xff0c;比如连接的数据库、配置文件、日志文件级别等都不一样。 2. 解决方案 在pom.xml文件中定义 2.1 真实代码 <project><dependencies></dependencies>…

nginx实战操作(常用命令及配置)

1. nginx介绍 2. nginx常用命令 验证配置是否正确: nginx -t查看Nginx的详细的版本号&#xff1a;nginx -V查看Nginx的简洁版本号&#xff1a;nginx -v启动Nginx&#xff1a;start nginx快速停止或关闭Nginx&#xff1a;nginx -s stop正常停止或关闭Nginx&#xff1a;n…

RK3399平台开发系列讲解(I2C子系统)4.20、I2C子系统之i2c adapter层的注册过程

平台内核版本安卓版本RK3399Linux4.4Android7.1🚀返回专栏总目录 文章目录 i2c_add_adapter__i2c_add_numbered_adapter()i2c_register_adapteri2c_do_add_adapterI2C设备检测:i2c_detecti2c_detect_address沉淀、分享、成长,让自己和他人都能有所收获!😄 注册适配器设备…

Linux学习方法和心态

如果单纯是为了架站&#xff0c;那我就可以毕业了。 成就感兴趣学习的动力。 不同的环境下&#xff0c;解决问题的办法有很多种&#xff0c;只要行得通&#xff0c;都是好方法。 Distribution 安装 熟悉Shell环境 Shell脚本 Share 心得 apt-get upgrade 更新本地软件 -y 慎用 a…

Java集合对象比对

1. 场景描述 通过java代码从外围接口中获取数据并落地&#xff0c;已经存在的不落地&#xff0c;不存在的落地&#xff0c;因有部分字段变化是正常的&#xff0c;只需比对3个字段相同即为相同。 2. 解决方案 设置定时任务&#xff08;三个标签完成springboot定时任务配置&am…

RK3399平台开发系列讲解(内存篇)15.2、 Page Cache是怎样产生和释放的?

平台内核版本安卓版本RK3399Linux4.4Android7.1=>返回专栏总目录<= 文章目录 全局__arm_ioremap_caller函数指针变量__arm_ioremap_pfn_callerarch/arm/include/asm/io.h

关闭启动数据库AWR功能

关闭awrexec DBMS_WORKLOAD_REPOSITORY.MODIFY_SNAPSHOT_SETTINGS(INTERVAL > 0); 启动awrexec DBMS_WORKLOAD_REPOSITORY.MODIFY_SNAPSHOT_SETTINGS(INTERVAL > 60); 转载于:https://www.cnblogs.com/Memories-off/p/10435424.html

idea下maven命令打包不同配置

1. 场景描述 不知道大家有没有遇到过&#xff1f;Idea集成的maven&#xff0c;在切换不同环境配置的时候&#xff0c;有时候反应很慢&#xff0c;还存在切换后打包还是原配置的情况。 2. 问题解决 通过在idea下执行maven命令进行切换&#xff0c;快速且准确。 2.1 项目打包…