酷站(www.ku0.com)-致力于为互联网从业者提供专业的网络资源资讯

热门关键词:  企业  as  baidu  c4rp3nt3r  美女

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

来源:互联网 作者:秩名 人气: 发布时间:2021-11-13
本篇文章主要介绍了python编程scrapy简单代码实现搜狗图片下载器的代码,对大家的学习或者工作具有一定的参考学习价值,感兴趣的小伙伴们可以参考一下,也感谢大家对酷站(ku0.com)的支持。

目标站点说明

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

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

再次运行代码,图片保存之后,文件名就变得易识别了许多。

在这里插入图片描述

最后补全下一页的逻辑即可实现本案例啦,这一步骤留给你来完成。

 

版权声明:本文内容来源于互联网或用户自行发布贡献,该文观点仅代表原作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 959677720#qq.cn(#换@) 举报,一经查实,本站将立刻删除。
原文链接:https://blog.csdn.net/hihell/article/details/120996308

相关文章

  • python百行代码实现汉服圈图片爬取的方法

    python百行代码实现汉服圈图片爬取的方法

    平时旅游的时候,在旅游景区我们经常可以看到穿各种服饰去拍照的游客,也不会刻意多关注。前两天浏览网页无意看到一个网站,看到穿汉服的女孩是真的很好看。无论......
    11-22
  • Python手机与电脑游戏脚本的编写介绍

    Python手机与电脑游戏脚本的编写介绍

    大家好,我叫善念。我发现我的粉丝量涨的很慢,这次厚脸皮要波关注。这次做的是一个小巧的游戏脚本,本质上它可以用于任意的电脑与手机游戏。 分析(x0) 这个游......
    11-18
  • python编程scrapy简单代码实现搜狗图片下载器的代

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

    目标站点说明 这次要采集的站点为搜狗图片频道,该频道数据由接口直接返回,接口如下: https://pic.sogou.com/napi/pc/recommend?key=homeFeedDatacategory=feedstart=10len=10 https://pic.sog......
    11-13
  • Python实现数据透视表介绍

    Python实现数据透视表介绍

    用Python里的Pandas可以实现,虽然感觉Excel更方便 1.groupby + agg 不够直观,不好看 对贷款年份,贷款种类创建数据透视 train_data.groupby([year_of_loan, class]).agg(d_roat =(isDefault, me......
    10-28
  • Python开发装包八种方法介绍

    Python开发装包八种方法介绍

    1. 使用 easy_install easy_install这应该是最古老的包安装方式了,目前基本没有人使用了。下面是easy_install的一些安装示例 # 通过包名,从PyPI寻找最新版本,自动下载、编译、......
    10-26
  • python实现简单石头剪刀布游戏的代码

    python实现简单石头剪刀布游戏的代码

    相信大家在童年或者生活中都玩过石头剪刀布这个游戏,这个游戏需要两个及以上的人。而今天,网上也实现了石头剪刀布的游戏。通过初步学习python,也学会了如何编写......
    10-23
  • python光学仿真面向对象光学元件类的实现

    python光学仿真面向对象光学元件类的实现

    光学元件类 平面反射镜是一种极为简单的模型,因为我们只需要考虑一个平面即可。但是除此之外的其他光学元件,可能会变得有些复杂:我们必须考虑光在入射面和出......
    10-19
  • 使用pyQT5显示网页的实现步骤介绍

    使用pyQT5显示网页的实现步骤介绍

    1、PyQTWebEngine安装库 加载网页需要使用PyQTWebEngine库,可以使用import PyQt5.QtWebEngineWidgets测试是否有这个库,如果没有,需要先安装 pip install PyQtWebEngine -i https://pypi.douban.c......
    10-18
  • python实现词频统计功能的方法

    python实现词频统计功能的方法

    功能要求 这是我们老师的作业 代码中都有注释 要求 词频统计软件: 1)从文本中读入数据:(文件的输入输出) 2)不区分大小写,去除特殊字符。 3)统计单词 例如:......
    10-18
  • Numpy如何检查数组全为零的几种方法介绍

    Numpy如何检查数组全为零的几种方法介绍

    概要 简单介绍几种用于判断numpy数组是否全零的测试方法。 1,numpy.any() numpy.any()函数用于检查一个numpy数字是否存在任何一个非0元素,因此将numpy.any()的结果取反即得nu......
    10-17