python编程scrapy简单代码如何实现搜狗图片下载器
发表于:2025-01-23 作者:千家信息网编辑
千家信息网最后更新 2025年01月23日,这篇文章主要介绍了python编程scrapy简单代码如何实现搜狗图片下载器,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。目标站点说明
千家信息网最后更新 2025年01月23日python编程scrapy简单代码如何实现搜狗图片下载器
这篇文章主要介绍了python编程scrapy简单代码如何实现搜狗图片下载器,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。
目标站点说明
这次要采集的站点为搜狗图片频道,该频道数据由接口直接返回,接口如下:
https://pic.sogou.com/napi/pc/recommend?key=homeFeedData&category=feed&start=10&len=10https://pic.sogou.com/napi/pc/recommend?key=homeFeedData&category=feed&start=20&len=10
其中只有 start
参数在发生变化,所以实现起来是比较简单的。
编写核心爬虫文件
import scrapyclass SgSpider(scrapy.Spider): name = 'sg' allowed_domains = ['pic.sogou.com'] base_url = "https://pic.sogou.com/napi/pc/recommend?key=homeFeedData&category=feed&start={}&len=10" start_urls = [base_url.format(0)] def parse(self, response): json_data = response.json() if json_data is not None: img_list = json_data["data"]["list"] for img in img_list: yield {'image_urls': [_["originImage"] for _ in img[0]["picList"]]} else: return None
上述代码直接调用了第一页的接口数据,后续代码都是在对JSON数据中的图片地址进行提取。
其中最重要的一行代码如下:
yield {'image_urls': [_["originImage"] for _ in img[0]["picList"]]}
这里的 image_urls
是为了调用 scrapy 内置的图片下载中间件,固定的参数。
settings.py
该文件也需要进行修改,具体细节如下所示:
# 用户代理设置USER_AGENT = 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.54 Safari/537.36'# Obey robots.txt rulesROBOTSTXT_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': 'pic.sogou.com',}# 开启 ImagesPipeline 图片保存管道ITEM_PIPELINES = { 'scrapy.pipelines.images.ImagesPipeline': 1,}# 图片存储文件夹IMAGES_STORE = "images"
运行代码图片就会自动进行下载,保存到 images
目录中,下载完毕输出如下信息,本次仅采集第一页数据,顾得到40张图片。
如果你代码运行之后,没有下载到目标图片,请确定是否出现如下BUG。
ImagesPipeline requires installing Pillow 4.0.0
解决办法非常简单,安装 Pillow
库即可。
还存在一个问题是文件名是动态的,看起来有点乱。
在 pipelines.py
文件中增加一个自定义文件名称的数据管道。
class SogouImgPipeline(ImagesPipeline): def get_media_requests(self, item, info): name = item["name"] for index, url in enumerate(item["image_urls"]): yield Request(url, meta={'name': name, 'index': index}) def file_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) return filename
上述代码的主要功能是重新命名了图片文件名,下面同步修改 SgSpider
类中的相关代码。
def parse(self, response): json_data = response.json() if json_data is not None: img_list = json_data["data"]["list"] for img in img_list: yield { 'name': img[0]['title'], 'image_urls': [_["originImage"] for _ in img[0]["picList"]], } else: return None
再次运行代码,图片保存之后,文件名就变得易识别了许多。
最后补全下一页的逻辑即可实现本案例啦,这一步骤留给你来完成。
感谢你能够认真阅读完这篇文章,希望小编分享的"python编程scrapy简单代码如何实现搜狗图片下载器"这篇文章对大家有帮助,同时也希望大家多多支持,关注行业资讯频道,更多相关知识等着你来学习!
图片
代码
文件
数据
篇文章
图片下载
搜狗
接口
文件名
频道
运行
编程
参数
名称
目标
站点
管道
重要
一行
中间件
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
网络安全实施情况总结
产业基金数据库有哪些
丰弘互联网科技
电脑网络安全服务小队
icc网络安全测试工作流程
ntp服务器连接配置
正规软件开发过程参考价格
包头市包东网络技术有限公司
酒店网络安全管理工作汇报
旅游同业软件开发
网络安全的语段
知网的英文数据库有哪些
悍将传手游连接不上服务器
研究生管理系统数据库设计
多元素软件开发方案公司
软件开发项目总结ppt模板
软件开发java宠物商店
郑州市网络技术有限公司
河北餐饮软件开发报价
上海时代网络技术服务价目表
学什么数据库比较好
2020网络安全文明宣传画
邮件服务器维护
mysql读取数据库
网络安全的语段
GALE数据库技术学院
软件开发结算计费
网络安全主要是哪几层
宣化区国家网络安全宣传
网络安全王营康