Python中scrapy下载保存图片的方法
Python中scrapy下载保存图片的方法
这篇文章主要介绍了Python中scrapy下载保存图片的方法的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇Python中scrapy下载保存图片的方法文章都会有所收获,下面我们一起来看看吧。
在日常爬虫练习中,我们爬取到的数据需要进行保存操作,在scrapy中我们可以使用ImagesPipeline这个类来进行相关操作,这个类是scrapy已经封装好的了,我们直接拿来用即可。
在使用ImagesPipeline下载图片数据时,我们需要对其中的三个管道类方法进行重写,其中 ― get_media_request 是对图片地址发起请求
― file path 是返回图片名称
― item_completed 返回item,将其返回给下一个即将被执行的管道类
那具体代码是什么样的呢,首先我们需要在pipelines.py文件中,导入ImagesPipeline类,然后重写上述所说的3个方法:
fromscrapy.pipelines.imagesimportImagesPipelineimportscrapyimportosclassImgsPipLine(ImagesPipeline):defget_media_requests(self,item,info):yieldscrapy.Request(url=item["img_src"],meta={"item":item})#返回图片名称即可deffile_path(self,request,response=None,info=None):item=request.meta["item"]print("########",item)filePath=item["img_name"]returnfilePathdefitem_completed(self,results,item,info):returnitem
方法定义好后,我们需要在settings.py配置文件中进行设置,一个是指定图片保存的位置IMAGES_STORE = "D:ImgPro",然后就是启用“ImgsPipLine”管道,
ITEM_PIPELINES={"imgPro.pipelines.ImgsPipLine":300,#300代表优先级,数字越小优先级越高}
设置完成后,我们运行程序后就可以看到“D:ImgPro”下保存成功的图片。
完整代码如下:
spider文件代码:
#-*-coding:utf-8-*-importscrapyfromimgPro.itemsimportImgproItemclassImgSpider(scrapy.Spider):name="img"allowed_domains=["www.521609.com"]start_urls=["http://www.521609.com/daxuemeinv/"]defparse(self,response):#解析图片地址和图片名称li_list=response.xpath("//div[@class="index_imglist_center"]/ul/li")forliinli_list:item=ImgproItem()item["img_src"]="http://www.521609.com/"+li.xpath("./a[1]/img/@src").extract_first()item["img_name"]=li.xpath("./a[1]/img/@alt").extract_first()+".jpg"#print("***********")#print(item)yielditem
items.py文件
importscrapyclassImgproItem(scrapy.Item):#definethefieldsforyouritemherelike:#name=scrapy.Field()img_src=scrapy.Field()img_name=scrapy.Field()
pipelines.py文件
fromscrapy.pipelines.imagesimportImagesPipelineimportscrapyimportosfromimgPro.settingsimportIMAGES_STOREasIMGSclassImgsPipLine(ImagesPipeline):defget_media_requests(self,item,info):yieldscrapy.Request(url=item["img_src"],meta={"item":item})#返回图片名称即可deffile_path(self,request,response=None,info=None):item=request.meta["item"]print("########",item)filePath=item["img_name"]returnfilePathdefitem_completed(self,results,item,info):returnitem
settings.py文件
importrandomBOT_NAME="imgPro"SPIDER_MODULES=["imgPro.spiders"]NEWSPIDER_MODULE="imgPro.spiders"IMAGES_STORE="D:ImgPro"#文件保存路径LOG_LEVEL="WARNING"ROBOTSTXT_OBEY=False#设置user-agentUSER_AGENTS_LIST=["Mozilla/5.0(WindowsNT6.1;WOW64)AppleWebKit/537.1(KHTML,likeGecko)Chrome/22.0.1207.1Safari/537.1","Mozilla/5.0(X11;CrOSi6862268.111.0)AppleWebKit/536.11(KHTML,likeGecko)Chrome/20.0.1132.57Safari/536.11","Mozilla/5.0(WindowsNT6.1;WOW64)AppleWebKit/536.6(KHTML,likeGecko)Chrome/20.0.1092.0Safari/536.6","Mozilla/5.0(WindowsNT6.2)AppleWebKit/536.6(KHTML,likeGecko)Chrome/20.0.1090.0Safari/536.6","Mozilla/5.0(WindowsNT6.2;WOW64)AppleWebKit/537.1(KHTML,likeGecko)Chrome/19.77.34.5Safari/537.1","Mozilla/5.0(X11;Linuxx86_64)AppleWebKit/536.5(KHTML,likeGecko)Chrome/19.0.1084.9Safari/536.5","Mozilla/5.0(WindowsNT6.0)AppleWebKit/536.5(KHTML,likeGecko)Chrome/19.0.1084.36Safari/536.5","Mozilla/5.0(WindowsNT6.1;WOW64)AppleWebKit/536.3(KHTML,likeGecko)Chrome/19.0.1063.0Safari/536.3","Mozilla/5.0(WindowsNT5.1)AppleWebKit/536.3(KHTML,likeGecko)Chrome/19.0.1063.0Safari/536.3","Mozilla/5.0(Macintosh;IntelMacOSX10_8_0)AppleWebKit/536.3(KHTML,likeGecko)Chrome/19.0.1063.0Safari/536.3","Mozilla/5.0(WindowsNT6.2)AppleWebKit/536.3(KHTML,likeGecko)Chrome/19.0.1062.0Safari/536.3","Mozilla/5.0(WindowsNT6.1;WOW64)AppleWebKit/536.3(KHTML,likeGecko)Chrome/19.0.1062.0Safari/536.3","Mozilla/5.0(WindowsNT6.2)AppleWebKit/536.3(KHTML,likeGecko)Chrome/19.0.1061.1Safari/536.3","Mozilla/5.0(WindowsNT6.1;WOW64)AppleWebKit/536.3(KHTML,likeGecko)Chrome/19.0.1061.1Safari/536.3","Mozilla/5.0(WindowsNT6.1)AppleWebKit/536.3(KHTML,likeGecko)Chrome/19.0.1061.1Safari/536.3","Mozilla/5.0(WindowsNT6.2)AppleWebKit/536.3(KHTML,likeGecko)Chrome/19.0.1061.0Safari/536.3","Mozilla/5.0(X11;Linuxx86_64)AppleWebKit/535.24(KHTML,likeGecko)Chrome/19.0.1055.1Safari/535.24","Mozilla/5.0(WindowsNT6.2;WOW64)AppleWebKit/535.24(KHTML,likeGecko)Chrome/19.0.1055.1Safari/535.24"]USER_AGENT=random.choice(USER_AGENTS_LIST)DEFAULT_REQUEST_HEADERS={"Accept":"text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8","Accept-Language":"en",#"User-Agent":"Mozilla/5.0(WindowsNT10.0;Win64;x64)AppleWebKit/537.36(KHTML,likeGecko)Chrome/58.0.3029.110Safari/537.36","User-Agent":USER_AGENT}#启动pipeline管道ITEM_PIPELINES={"imgPro.pipelines.ImgsPipLine":300,}
关于“Python中scrapy下载保存图片的方法”这篇文章的内容就介绍到这里,感谢各位的阅读!相信大家对“Python中scrapy下载保存图片的方法”知识都有一定的了解,大家如果还想学习更多知识,欢迎关注恰卡编程网行业资讯频道。
推荐阅读
-
python(中无效的十进制怎么解决 python怎么转换进制)
python怎么转换进制?Python执行二进制转换:1.十进制到二进制(bin)首先,让让我们看看如何将十进制转换成二进制。我...
-
python怎么清除完全相同的行(python splte如何分隔有多个相同符号的str)
pythonsplte如何分隔有多个相同符号的str?str你的string内容str_(相同的符号)执行完了以后再在相同符号的...
-
python(编程控制电脑关机 如何控制电脑关机)
如何控制电脑关机?可以在电脑的运行窗口中输入输入公式,给电脑可以设置自动关机。1.按开快捷键winr然后打开运行窗口。2.在运行窗...
-
python中的特殊标识符(python 中 标识符中可以有逗号吗)
python中标识符中可以有逗号吗?在python语言中合法的标识符是字母、数字以及_,所以我合法的标识符中肯定不能有逗号if...
-
python(excel 提取数据写入新表 python导入excel数据找不到工作簿)
python导入excel数据找不到工作簿?我可以导入数据后找不到工作,不是因为他的工作没有被转移。什么软件可提取并合并Exce...
-
python中字典定义的四种方法(python global关键字的用法详解)
pythonglobal关键字的用法详解?global标志实际上是目的是提示python讲解器,说被其修饰的变量是全局变量。这样...
-
python(array用法 python如何对两个数组做差处理)
python如何对两个数组做差处理?Python中的列表中的元素肯定不能真接相加,减。t最佳的位置的是将列表装换成Python中的...
-
python多行注释符号怎么表示
python多行注释符号怎么表示这篇文章主要介绍“python多行...
-
python支持的操作系统是什么
python支持的操作系统是什么这篇文章主要介绍“python支持...
-
python如何判断列表为空
python如何判断列表为空这篇文章主要介绍“python如何判断...