python编程scrapy简单代码实现搜狗图片下载器

 更新时间:2021年11月13日 16:14:05   作者:梦想橡皮擦  
这篇文章主要为大家介绍了使用python scrapy简单代码实现搜狗图片下载器示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助

学习任何编程技术,都要有紧有送,今天这篇博客就到了放松的时候了,我们学习一下如何用 scrapy 下载图片吧。

目标站点说明

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

https://pic.sogou.com/napi/pc/recommend?key=homeFeedData&category=feed&start=10&len=10
https://pic.sogou.com/napi/pc/recommend?key=homeFeedData&category=feed&start=20&len=10

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

编写核心爬虫文件

import scrapy
class 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 rules
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': 'pic.sogou.com',
}
# 开启 ImagesPipeline 图片保存管道
ITEM_PIPELINES = {
    'scrapy.pipelines.images.ImagesPipeline': 1,
}
# 图片存储文件夹
IMAGES_STORE = "images"

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

python scrapy ,几行代码实现一个搜狗图片下载器

如果你代码运行之后,没有下载到目标图片,请确定是否出现如下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简单代码实现搜狗图片下载器的详细内容,更多关于python scrapy实现搜狗图片下载器的资料请关注脚本之家其它相关文章!

相关文章

  • python读取nc数据并绘图的方法实例

    python读取nc数据并绘图的方法实例

    最近项目中需要处理和分析NC数据,所以下面这篇文章主要给大家介绍了关于python读取nc数据并绘图的相关资料,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
    2022-05-05
  • python离线安装外部依赖包的实现

    python离线安装外部依赖包的实现

    今天小编就为大家分享一篇python离线安装外部依赖包的实现,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-02-02
  • Python列表切片操作实例总结

    Python列表切片操作实例总结

    这篇文章主要介绍了Python列表切片操作,结合实例形式总结分析了Python列表切片常见操作技巧与注意事项,需要的朋友可以参考下
    2019-02-02
  • Python3实现发送QQ邮件功能(附件)

    Python3实现发送QQ邮件功能(附件)

    这篇文章主要为大家详细介绍了Python3实现发送QQ邮件功能,附件方面,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-12-12
  • Python3实现Excel行分级与单元格填色

    Python3实现Excel行分级与单元格填色

    这篇文章主要为大家详细介绍了如何使用Python3实现Excel行分级与单元格填色功能,文中的示例代码讲解详细,有需要的小伙伴可以参考一下
    2025-02-02
  • python中类和实例如何绑定属性与方法示例详解

    python中类和实例如何绑定属性与方法示例详解

    最近在学习python,纯粹是自己的兴趣爱好,然而并没有系统地看python编程书籍,觉得上面描述过于繁琐,在网站找了一些学习的网站,下面这篇文章主要给大家介绍了关于python中类和实例时如何绑定属性与方法的相关资料,需要的朋友可以参考下。
    2017-08-08
  • python求平均值多种方法代码示例

    python求平均值多种方法代码示例

    要求一个列表中的数的平均值,我们可以使用Python来实现,这篇文章主要给大家介绍了关于python求平均值多种方法的相关资料,文中通过代码介绍的非常详细,需要的朋友可以参考下
    2023-11-11
  • Python实现的文本对比报告生成工具示例

    Python实现的文本对比报告生成工具示例

    这篇文章主要介绍了Python实现的文本对比报告生成工具,涉及Python基于difflib模块实现对文本内容进行对比的相关操作技巧,需要的朋友可以参考下
    2018-05-05
  • 如何使用PyTorch优化一个边缘检测器

    如何使用PyTorch优化一个边缘检测器

    这篇文章主要给大家介绍了关于如何使用PyTorch优化一个边缘检测器的相关资料,文中通过代码介绍的非常详细,对大家的学习或者工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2024-09-09
  • windows安装python超详细图文教程

    windows安装python超详细图文教程

    今天带各位小伙伴学习怎么在windows上安装python,文中有非常详细的图文介绍,对初步学习python的小伙伴们有很好地帮助,需要的朋友可以参考下
    2021-05-05

最新评论