python编程scrapy简单代码实现搜狗图片下载器_第1页
python编程scrapy简单代码实现搜狗图片下载器_第2页
python编程scrapy简单代码实现搜狗图片下载器_第3页
python编程scrapy简单代码实现搜狗图片下载器_第4页
python编程scrapy简单代码实现搜狗图片下载器_第5页
全文预览已结束

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第python编程scrapy简单代码实现搜狗图片下载器学习任何编程技术,都要有紧有送,今天这篇博客就到了放松的时候了,我们学习一下如何用scrapy下载图片吧。

目标站点说明

这次要采集的站点为搜狗图片频道,该频道数据由接口直接返回,接口如下:

/napi/pc/recommendkey=homeFeedDatacategory=feedstart=10len=10

/napi/pc/recommendkey=homeFeedDatacategory=feedstart=20len=10

其中只有start参数在发生变化,所以实现起来是比较简单的。

编写核心爬虫文件

importscrapy

classSgSpider(scrapy.Spider):

name=sg

allowed_domains=[]

base_url=/napi/pc/recommendkey=homeFeedDatacategory=feedstart={}len=10

start_urls=[base_url.format(0)]

defparse(self,response):

json_data=response.json()

ifjson_dataisnotNone:

img_list=json_data[data][list]

forimginimg_list:

yield{image_urls:[_[originImage]for_inimg[0][picList]]}

else:

returnNone

上述代码直接调用了第一页的接口数据,后续代码都是在对JSON数据中的图片地址进行提取。

其中最重要的一行代码如下:

yield{image_urls:[_[originImage]for_inimg[0][picList]]}

这里的image_urls是为了调用scrapy内置的图片下载中间件,固定的参数。

settings.py

该文件也需要进行修改,具体细节如下所示:

#用户代理设置

USER_AGENT=Mozilla/5.0(WindowsNT6.1;Win64;x64)AppleWebKit/537.36(KHTML,likeGecko)Chrome/95.0.4638.54Safari/537.36

#Obeyrobots.txtrules

ROBOTSTXT_OBEY=False

#下载间隔设置为3秒

DOWNLOAD_DELAY=3

#默认请求头

DEFAULT_REQUEST_HEADERS={

Accept:application/json,text/plain,*/*,

Accept-Encoding:gzip,deflate,br,

Accept-Language:zh-CN,zh;q=0.9,

HOST:,

#开启ImagesPipeline图片保存管道

ITEM_PIPELINES={

scrapy.pipelines.images.ImagesPipeline:1,

#图片存储文件夹

IMAGES_STORE=images

运行代码图片就会自动进行下载,保存到images目录中,下载完毕输出如下信息,本次仅采集第一页数据,顾得到40张图片。

如果你代码运行之后,没有下载到目标图片,请确定是否出现如下BUG。

ImagesPipelinerequiresinstallingPillow4.0.0

解决办法非常简单,安装Pillow库即可。

还存在一个问题是文件名是动态的,看起来有点乱。

在pipelines.py文件中增加一个自定义文件名称的数据管道。

classSogouImgPipeline(ImagesPipeline):

defget_media_requests(self,item,info):

name=item[name]

forindex,urlinenumerate(item[image_urls]):

yieldRequest(url,meta={name:name,index:index})

deffile_path(self,request,response=None,info=None):

#名称

name=request.meta[name]

#索引

index=request.meta[index]

filename=u{0}_{1}.jpg.format(name,index)

print(filename)

returnfilename

上述代码的主要功能是重新命名了图片文件名,下面同步修改SgSpider类中的相关代码。

defparse(self,response):

json_data=response.json()

ifjson_dataisnotNone:

img_list=json_data[data][list]

forimginimg_list:

yield{

name:img[0][title],

image_urls:[_[originImage]for_inimg[0][picList]],

else:

returnNone

再次运行代码,图片保存之后,文

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论