iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > Python >python编程scrapy简单代码实现搜狗图片下载器
  • 433
分享到

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

2024-04-02 19:04:59 433人浏览 安东尼

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实现搜狗图片下载器的资料请关注编程网其它相关文章!

--结束END--

本文标题: python编程scrapy简单代码实现搜狗图片下载器

本文链接: https://www.lsjlt.com/news/157246.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • python编程scrapy简单代码实现搜狗图片下载器
    学习任何编程技术,都要有紧有送,今天这篇博客就到了放松的时候了,我们学习一下如何用 scrapy 下载图片吧。 目标站点说明 这次要采集的站点为搜狗图片频道,该频道数据由接口直接返回...
    99+
    2024-04-02
  • python编程scrapy简单代码如何实现搜狗图片下载器
    这篇文章主要介绍了python编程scrapy简单代码如何实现搜狗图片下载器,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。目标站点说明这次要采集的站点为搜狗图片频道,该频道数...
    99+
    2023-06-25
  • android网络图片查看器简单实现代码
    本文实例为大家分享了android网络图片查看器的具体代码,供大家参考,具体内容如下效果图:输入一个图片url转换成bitmap位图展示到ImageView上xml:<?xml version="1.0" encoding="...
    99+
    2023-05-31
    android 图片查看器 roi
  • jQuery图片瀑布流的简单实现代码
    这篇文章主要为大家展示了“jQuery图片瀑布流的简单实现代码”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“jQuery图片瀑布流的简单实现代码”这篇文章吧。具...
    99+
    2024-04-02
  • 利用Python多线程实现图片下载器
    目录导语开发工具环境搭建原理简介效果展示导语 之前有很多小伙伴说想学习一下多线程图片下载器,虽然好像已经过去很久了,不过还是上来安排一波吧。至于题目为什么说是构建一个小型数据集,因为...
    99+
    2024-04-02
  • 非常简单的Python识别图片验证码实现过程
    很久之前,分享过一次Python代码实现验证码识别的办法。 当时采用的是pillow+pytesseract,优点是免费,较为易用。但其识别精度一般,若想要更高要求的验证码识别,初学...
    99+
    2024-04-02
  • Java编程实现月食简单代码分享
    用java的框架和面板的知识做的一个展示月食过程的小程序。这里的想法就是先把背景设置成黑色,然后画一个黄色的圆作为月亮,接着画一个黑色的圆,将它的y坐标与月亮相同,让这个x不断的自增,(这个x代表的是fillArc()里面的那个其实位置坐标...
    99+
    2023-05-30
    java 小程序 基础
  • VB.NET下载程序实现代码怎么编写
    今天就跟大家聊聊有关VB.NET下载程序实现代码怎么编写,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。对于VB.NET语言的应用来说,其中有很多小技巧值得我们去掌握,来充实我们的开发...
    99+
    2023-06-17
  • 图片去摩尔纹简述实现python代码示例
    目录1、前言2、网络结构复现3、数据预处理4、模型训练总结1、前言 当感光元件像素的空间频率与影像中条纹的空间频率接近时,可能产生一种新的波浪形的干扰图案,即所谓的摩尔纹。传感器的...
    99+
    2023-02-24
    python 图片去摩尔纹 python 去摩尔纹
  • Android 实现单线程轮循机制批量下载图片
    Android 实现单线程轮循机制批量下载图片listview 在为item 添加从网上下载下来的图片时, 如果每次都整合一个item时都需要new一个Thread去下载图片,listview长时间滑动时会产生大量线程。用单线程轮循机制则可...
    99+
    2023-05-30
    android 单线程 下载图片
  • JavaWeb 文件的上传和下载功能简单实现代码
    一、文件的上传和下载1、文件上传的原理分析     1、文件上传的必要前提:          a、提供for...
    99+
    2023-05-31
    java web 文件上传
  • python编程简单几行代码实现视频转换Gif示例
    目录一、前言二、教程1. 安装必备库moviepy2. 写入代码3. 转换效果4. GIF很大的解决方案5. 截取视频长度转换6. 指定转换后的图片大小(分辨率)示例一、前言 很多网...
    99+
    2024-04-02
  • Python K-means实现简单图像聚类的示例代码
    这里直接给出第一个版本的直接实现: import os import numpy as np from sklearn.cluster import KMeans import ...
    99+
    2024-04-02
  • Java GUI编程之贪吃蛇游戏简单实现方法【附demo源码下载】
    本文实例讲述了Java GUI编程之贪吃蛇游戏简单实现方法。分享给大家供大家参考,具体如下:例子简单,界面简陋 请见谅项目结构如下Constant.jvava 代码如下:package snake;public class Constant...
    99+
    2023-05-31
    java gui 游戏
  • Java图形化界面编程实现简单计算器
    1.简单计算器 使用AWT编程,FrameNORTH区域放置TextField组件,将指定为4行5列GridLayout布局管理器的Panel放置于Frame中部区域,其中填充操作符...
    99+
    2024-04-02
  • GCN-图卷积神经网络算法简单实现(含python代码)
    本文是就实现GCN算法模型进行的代码介绍,上一篇文章是GCN算法的原理和模型介绍。 代码中用到的Cora数据集: 链接:https://pan.baidu.com/s/1SbqIOtysKqHKZ7C50DM_eA  提取码:pfn...
    99+
    2023-09-01
    1024程序员节 python jupyter 卷积神经网络
  • Java编程之多线程死锁与线程间通信简单实现代码
    死锁定义 死锁是指两个或者多个线程被永久阻塞的一种局面,产生的前提是要有两个或两个以上的线程,并且来操作两个或者多个以上的共同资源;我的理解是用两个线程来举例,现有线程A和B同时操作两个共同资源a和b,A操作a的时候上锁LockA,继续执行...
    99+
    2023-05-30
    java 多线程 ava
  • python爬虫简单的添加代理以及编写进行访问的实现代码
    python爬虫简单的添加代理以及编写进行访问的实现代码,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。在使用python对网页进行多次快速爬取的时候,访问次数过于频繁,服务...
    99+
    2023-06-02
  • 如何使用Java图形化界面编程实现简单计算器
    这篇文章主要为大家展示了“如何使用Java图形化界面编程实现简单计算器”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“如何使用Java图形化界面编程实现简单计算器”这篇文章吧。1.简单计算器使用A...
    99+
    2023-06-22
  • python基于tkinter图形化编程实现简易计算器功能
    基于tkinter图形化编程的简易计算器,供大家参考,具体内容如下 代码如下: import re import tkinter import tkinter.messagebox ...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作