python编程scrapy简单代码如何实现搜狗图片下载器
发表于:2025-02-19 作者:千家信息网编辑
千家信息网最后更新 2025年02月19日,这篇文章主要介绍了python编程scrapy简单代码如何实现搜狗图片下载器,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。目标站点说明
千家信息网最后更新 2025年02月19日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安全错误
数据库的锁怎样保障安全
数据库怎么看用户角度
服务器申报
预防网络安全手抄报简单
青少年网络安全必要性
做好监狱网络安全管理工作
四川网络技术服务
gmail邮箱pip服务器
dell服务器管理命令
服务器和台式运行内存通用吗
美丽中国软件开发商
王者的不同服务器是什么
中小型网络安全管理教材
远程查询sql数据库
vc2008数据库
安徽高中网络安全
新闻工作与网络安全
查看服务器的任务管理器
数据库手动创建
网络安全 推荐
cc2540软件开发
诚信用什么服务器
河北放心软件开发价格参考价格
建立软件开发流程 文档
家用打印机服务器有必要买吗
服务器hba卡怎么查看
安徽高中网络安全
诚信经营应用软件开发
湖州网络安全教育
黑客文化与网络安全学什么
江西省网络安全知识竟赛