爬虫主流框架分享--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 的方式发送请求
scrapy 框架向网站服务器发送Post请求的步骤!
第一步:创建爬虫项目 scrapy startproject 爬虫项目名称
第二步:进入到爬虫文件项目文件夹内 cd 真爬虫文件项目
第三步:创建真的爬虫文件 scrapy genspider 真的爬虫文件名 待爬取网站域名
第四步:在 item.py 文件内定义待爬取数据的字段
第五步:在真的爬虫文件内重写 start_requests 方法向服务器网站发送 Post 请求,并由解析函数解析提取数据
第六步:在项目管道内对提取的数据进行处理
第七步:设置 settings.py 文件
第八步:启动爬虫
注意:
1:想要用Scrapy框架发送post请求一定要在真的爬虫文件内重写 strat_requests方法
2:表单数据的value值都是字符串,没有整形!!!!
Scrapy图片管道
Scrapy 保存图片的方法(图片管道)步骤
第一步:创建爬虫项目
第二步:进入到爬虫项目
第三步:创建真的爬虫文件
第四步:进入 items.py 文件内定义图片的链接以及名称字段(保存图片一般是这两个字段)
第五步:进入真的爬虫文件内,重写 srart_requests 方法实现多线程爬虫,获取到图片的链接以及名称之后通过 yield 交给项目管道
第六步:进入 pipelines.py 文件内,继承 Scrapy 的图片管道类,重写两个方法(如下图),实现批量图片的保存
第七步:进入 settings.py 文件内,设置图片保存的路径变量 IMAGES_STORE (文件夹路径)以及其他参数
第八步:运行爬虫文件!
Scrapy 图片管道(保存图片用)的几点注意事项
1:在pipelines.py文件内 管道类需要继承Scrapy为我们写好的图片管道类(ImagesPipelin)!
2:我们需要重写继承的类的两个方法可实现图片的保存,即get_media_requests方法(用于图片下载)以及file_path方法(用于设置图片保存的名称)
Scrapy文件管道
os.path.splitext(url)方法的功能
功能:将文件的下载链接拆分为两部分,用来获取文件的后缀
语法:
1 | import os |
注意:文件下载链接为 https://123456kkk.aaa.jpg 也可以获取到文件的后缀为 .jpg
利用 Scrapy 框架的文件管道保存网站中的文件流程
第一步:创建爬虫项目
第二步:进入到爬虫项目
第三步:创建真的爬虫文件
第四步:进入 items.py 文件内定义文件的链接以及名称字段(保存文件一般是这两个字段)
第五步:进入真的爬虫文件内,看情况重写 srart_requests 方法(多线程),获取到文件的链接以及名称之后通过 yield 交给项目管道
第六步:进入 pipelines.py 文件内,继承 Scrapy 的文件管道类,重写两个方法(如下图),实现批量文件的保存
第七步:进入 settings.py 文件内,设置 FILES_STORE字段(设置文件保存的路径)以及其它参数
第八步:运行爬虫文件!
Scrapy 框架的文件管道与图片管道在保存数据上有什么不同!
1:继承的类不一样,图片是ImagesPipline,文件是 FilesPipline
2:文件在项目管道内重写的 file_path 方法与图片的方法略有不同(获取文件后缀名!)
持续更新中……