新绛网站建设,wordpress 删除分类目录,it运维工作总结,那些域名可以做后缀做网站1、Scrapy框架初识#xff08;点击前往查阅#xff09;
2、Scrapy框架持久化存储#xff08;点击前往查阅#xff09;
3、Scrapy框架内置管道
4、Scrapy框架中间件#xff08;点击前往查阅#xff09; Scrapy 是一个开源的、基于Python的爬虫框架#xff0c;它提供了…1、Scrapy框架初识点击前往查阅
2、Scrapy框架持久化存储点击前往查阅
3、Scrapy框架内置管道
4、Scrapy框架中间件点击前往查阅 Scrapy 是一个开源的、基于Python的爬虫框架它提供了强大而灵活的工具用于快速、高效地提取信息。Scrapy包含了自动处理请求、处理Cookies、自动跟踪链接、下载中间件等功能
Scrapy框架的架构图先学会再来看就能看懂了 一、内置管道图片视频
1sttings设置
# 用于在指定目录下创建一个保存图片的文件夹。
IMAGES_STORE ./imgs
其他的设置不理解的可以参考 Scrapy框架初识 2数据分析
详细见图片中注视哦 代码
import scrapy
from ..items import CsdnItemclass ImgSpider(scrapy.Spider):# 爬虫文件唯一标识name img# allowed_domains [www.xxx.com]# 发起请求的url列表start_urls [https://image.so.com/zjl?sn0chwallpaper]def parse(self, response):# 获取返回数据根据分析得到数据是json格式的img_data response.json()# 根据数据分析我们需要数据在list中for url in img_data[list]:# 循环获取到图片的标题和urlimg_title url[title]img_url url[imgurl]# 实例化item对象item CsdnItem()# 往item中封装数据item[img_title] img_titleitem[img_url] img_url# 将item提交给管道yield item 3创建item对象 详细见图片中注视哦 代码
import scrapyclass CsdnItem(scrapy.Item):# define the fields for your item here like:# 变量随便命名scrapy.Field() 是固定写法img_title scrapy.Field()img_url scrapy.Field() 4提交管道持久化存储
4.1模块安装
pip install pillow4.2代码分析
配合下方图片
1、首先导入 ImagesPipeline 模块然后class类继承。2、重新构建三个固定函数用于图片的批量下载和保存的操作。 get_media_requests函数负责对图片进行请求发送获取图片二进制的数据。 itme获取爬虫数据传过来的数据这个不懂理解看这个item相关知识yield发起请求这个是固定写法参数意思可以看图中注释。file_path函数负责指定保存图片的名字。 利用requests来获取上面传过来的数据。return返回的值就是图片的名字和后缀item_completed函数用于将item对象传递给下一个管道。 代码
import scrapy
from scrapy.pipelines.images import ImagesPipeline # 导入模块class CsdnPipeline(ImagesPipeline): # ImagesPipeline括号内加入这个 是面向对象继承属于面向对象知识。# 重新构建三个固定函数用于图片的批量下载和保存的操作。def get_media_requests(self, item, info): # 该函数是负责对图片进行请求发送获取图片二进制的数据# 可以通过item参数接收爬虫文件提交过来的item对象img_title item[img_title]img_url item[img_url]# 对图片地址发起请求(参数1参数2) 参数1:url 参数2请求传参可以将数据传给 file_path 下面这个函数yield scrapy.Request(img_url, meta{img_title: img_title})def file_path(self, request, responseNone, infoNone, *, itemNone): # 负责指定保存图片的名字# 接收 get_media_requests 函数中通过meta发送过来的数据。img_title request.meta[img_title]# 给图片名字带上后缀img_title img_title .jpg# 然后返回图片名字return img_titledef item_completed(self, results, item, info): # 用于将item对象传递给下一个管道return item5结果展示与总结
为什么会在这个文件夹中呢因为刚开始的 settings 中我们创建并指定了这个文件夹 补充在设置 settings 中还可以设置图片的缩略图尺寸。 代码流程 1.在爬虫文件中进行图片/视频的链接提取 2.将提取到的链接封装到items对象中提交给管道 3.在管道文件中自定义一个父类为ImagesPipeline的管道类且重写三个方法即可 def get_media_requests(self, item, info):接收爬虫文件提交过来的item对象然后对图片地址发起网路请求返回图片的二进制数据def file_path(self, request, responseNone, infoNone, *, itemNone)指定保存图片的名称
def item_completed(self, results, item, info)返回item对象给下一个管道类 二、内置管道文件
1sttings设置
# 用于在指定目录下创建一个保存文件的文件夹。
FILES_STORE ./file
其他的设置不理解的可以参考 Scrapy框架初识 2数据分析
详细见图片中注视哦比较简单不做过多分析了
代码
import scrapy
from ..items import CsdnItem # 将item模块导入class FileSpider(scrapy.Spider):# 爬虫文件唯一标识name file# allowed_domains [www.xxx.com]# 发起请求的url列表start_urls [https://docs.twisted.org/en/stable/core/examples/]def parse(self, response):# 解析到url列表url_list response.xpath(//section[idexamples]/section[1]//ul//a/href).extract()for url in url_list: # 分析得到URL不全。# 利用字符串分割拼接成一个完整的。url url.split(../../)[-1]download_url https://docs.twisted.org/en/stable/ url# 文件名称就取链接的最后的title url.split(/)[-1]# 创建item对象item CsdnItem()# 封装值item[file_urls] download_urlitem[file_title] title# 将item提交给管道yield item 3创建item对象
详细见图片中注视哦与前面不同的是有2个字段是必须存在的。 4提交管道持久化存储
4.1模块安装
pip install pillow4.2代码分析
配合下方图片
1、首先导入FilesPipeline 模块然后class类继承。2、重新构建三个固定函数用于文件的批量下载和保存的操作。 get_media_requests函数负责对文件进行请求获取图片二进制的数据。 itme获取爬虫数据传过来的数据这个不懂理解看这个item相关知识yield发起请求这个是固定写法参数意思可以看图中注释。file_path函数负责指定保存文件的名字。 利用requests来获取上面传过来的数据。return返回的值就是文件的名字item_completed函数用于将item对象传递给下一个管道。 代码
import scrapy
from scrapy.pipelines.files import FilesPipeline # 导入模块class CsdnPipeline(FilesPipeline): # ImagesPipeline括号内加入这个 是面向对象继承属于面向对象知识。# 重新构建三个固定函数用于文件的批量下载和保存的操作。def get_media_requests(self, item, info): # 该函数是负责对文件url进行请求获取文件二进制的数据# 可以通过item参数接收爬虫文件提交过来的item对象file_title item[file_title]file_urls item[file_urls]# 对文件地址发起请求(参数1参数2) 参数1:url 参数2请求传参可以将数据传给 file_path 下面这个函数yield scrapy.Request(file_urls, meta{file_title: file_title})def file_path(self, request, responseNone, infoNone, *, itemNone): # 负责指定保存文件的名字# 接收 get_media_requests 函数中通过meta发送过来的数据。file_title request.meta[file_title]# 然后返回文件名字return file_titledef item_completed(self, results, item, info): # 用于将item对象传递给下一个管道return item
5结果展示与总结 代码流程 在spider中爬取要下载的文件链接将其放置于item中的file_urls字段中存储 spider提交item给FilesPipeline管道 当FilesPipeline处理时它会检测是否有file_urls字段如果有的话则会对其进行文件下载 下载完成之后会将结果写入item的另一字段files Item要包含file_urls和files两个字段