爬虫主流框架分享--Scrapy【第六期】

文章主讲内容:Scrapy处理Post请求及其设置图片管道与文件管道!

Scrapy 框架怎么发送 Get 以及 Post 请求

向网站服务器发送 Get 请求

1
yield scrapy.Request(url=….,meta=….,callback=…,dont_filter = True

流程详解:将目标 url 交给调度器入队列,并且出队列经过引擎交给下载器,下载器向网站服务器发送 Get 请求,获取响应的对象交给解析函数处理

dont_filter参数功能:

值为False:当一个 url 经过调度器入队列并出队列会为这个 url 生成一个指纹,相同的url再次经过调度器时,将不在交由下载器下载,并返回响应对象!

值为True:当一个 url 经过调度器入队列并出队列会为这个 url 生成一个指纹,相同的url再次经过调度器时,将继续交由下载器下载,并返回响应对象!

向网站服务器发送 Post 请求

1
yield scrapy.FormRequest(url=…,formdata=…,meta=…,callback=…. , dont_filter = True

流程详解:将目标url交给调度器入队列,并出队列,经过引擎交给下载器,下载器带着表单数据(formdata)向服务器网站发送Post请求,获取响应对象交给解析函数处理

Scrapy 框架发送 Post请求的注意事项【很重要】

注意事项:在真的爬虫文件内一定要重写 start_requests 方法,因为 start_requests 源码默认是以 Get 的方式发送请求

image-20211006160521721

scrapy 框架向网站服务器发送Post请求的步骤!

第一步:创建爬虫项目 scrapy startproject 爬虫项目名称

第二步:进入到爬虫文件项目文件夹内 cd 真爬虫文件项目

第三步:创建真的爬虫文件 scrapy genspider 真的爬虫文件名 待爬取网站域名

第四步:在 item.py 文件内定义待爬取数据的字段

image-20211006160601083

第五步:在真的爬虫文件内重写 start_requests 方法向服务器网站发送 Post 请求,并由解析函数解析提取数据

image-20211006160608203

第六步:在项目管道内对提取的数据进行处理

image-20211006160617022

第七步:设置 settings.py 文件

image-20211006160623867

第八步:启动爬虫

image-20211006160630269

注意:

1:想要用Scrapy框架发送post请求一定要在真的爬虫文件内重写 strat_requests方法

2:表单数据的value值都是字符串,没有整形!!!!

image-20211006160636656

Scrapy图片管道

Scrapy 保存图片的方法(图片管道)步骤

第一步:创建爬虫项目

第二步:进入到爬虫项目

第三步:创建真的爬虫文件

第四步:进入 items.py 文件内定义图片的链接以及名称字段(保存图片一般是这两个字段)

image-20211006161005076

第五步:进入真的爬虫文件内,重写 srart_requests 方法实现多线程爬虫,获取到图片的链接以及名称之后通过 yield 交给项目管道

image-20211006161012804

第六步:进入 pipelines.py 文件内,继承 Scrapy 的图片管道类,重写两个方法(如下图),实现批量图片的保存

image-20211006161020873

第七步:进入 settings.py 文件内,设置图片保存的路径变量 IMAGES_STORE (文件夹路径)以及其他参数

image-20211006161028154

第八步:运行爬虫文件!

Scrapy 图片管道(保存图片用)的几点注意事项

1:在pipelines.py文件内 管道类需要继承Scrapy为我们写好的图片管道类(ImagesPipelin)!

2:我们需要重写继承的类的两个方法可实现图片的保存,即get_media_requests方法(用于图片下载)以及file_path方法(用于设置图片保存的名称)

Scrapy文件管道

os.path.splitext(url)方法的功能

功能:将文件的下载链接拆分为两部分,用来获取文件的后缀

语法:

1
2
import os
文件后缀 = os.path.splitext(文件下载链接)

注意:文件下载链接为 https://123456kkk.aaa.jpg 也可以获取到文件的后缀为 .jpg

image-20211006161342007

利用 Scrapy 框架的文件管道保存网站中的文件流程

第一步:创建爬虫项目

第二步:进入到爬虫项目

第三步:创建真的爬虫文件

第四步:进入 items.py 文件内定义文件的链接以及名称字段(保存文件一般是这两个字段)

image-20211006161403196

第五步:进入真的爬虫文件内,看情况重写 srart_requests 方法(多线程),获取到文件的链接以及名称之后通过 yield 交给项目管道

image-20211006161433059

第六步:进入 pipelines.py 文件内,继承 Scrapy 的文件管道类,重写两个方法(如下图),实现批量文件的保存

image-20211006161447695

第七步:进入 settings.py 文件内,设置 FILES_STORE字段(设置文件保存的路径)以及其它参数

image-20211006161458031

第八步:运行爬虫文件!

Scrapy 框架的文件管道与图片管道在保存数据上有什么不同!

1:继承的类不一样,图片是ImagesPipline,文件是 FilesPipline

2:文件在项目管道内重写的 file_path 方法与图片的方法略有不同(获取文件后缀名!)

持续更新中……