Python爬虫之足球小将动漫(图片)下载

??尽管俄罗斯世界杯的热度已经褪去,但这届世界杯还是给全世界人民留下了无数难忘的回忆,不知你的回忆里有没有日本队的身影?本次世界杯中,日本队的表现让人眼前一亮,很难想象,就是这样一只队伍,二十几年还是我们国家足球队的水平一样,也许还不如我们国足呢。

??足球小将(队长小翼、キャプテン翼)由日本著名动漫家高桥阳一于1981年开始连载,从此这部动漫就伴随着一代又一代的日本,甚至全世界的少年儿童成长,也在无形有形中促进了日本足球的进步。本届世界杯中,在日本与比利时的比赛中,日本球迷们高举队长小翼的画面就足以证明这部动漫对日本足球的深远影响。

??本文将介绍如何利用Python爬虫来下载足球小将的动漫图片。

??首先,我们需要下载的网址为:https://mhpic.samanlehua.com/comic/Z%2F%E8%B6%B3%E7%90%83%E5%B0%8F%E5%B0%86%E7%BF%BC%2F%E7%AC%AC01%E5%8D%B7%2F2.jpg-noresize.webp, 截图如下:

我们注意到,在这个网址中,只有卷数和动漫图片的序号在发生改变,因此,我们只需要找到总共的卷数以及每一卷中所包含的图片即可完成此爬虫。

??不过稍微需要注意的是,爬虫下载下来的图片格式为webp格式。WebP(发音 weppy,项目主页),是一种支持有损压缩和无损压缩的图片文件格式,派生自图像编码格式 VP8。根据 Google 的测试,无损压缩后的 WebP 比 PNG 文件少了 45% 的文件大小,即使这些 PNG 文件经过其他压缩工具压缩之后,WebP 还是可以减少 28% 的文件大小。

??我们希望能够将webp格式的图片转化为png格式。因此,我们需要在Linux系统中安装webp软件,安装的方式如下:

  • Ubuntu: sudo apt-get install webp
  • CentOs: yum -y install libwebp-devel libwebp-tools

安装完后,通过以下命令就可以讲webp格式的图片转化为png格式了:

dwebp picture.webp -o picture.png

??整个爬虫的思路就讲完了,我们利用多线程进行下载图片以及图片格式转换的操作,完整的Python代码如下(需要事先安装webp, 以及保存目录需要设置好):

# -*- coding: utf-8 -*-
import urllib.request
import os
import time
from concurrent.futures import ThreadPoolExecutor, wait, ALL_COMPLETED

global COUNT # 下载失败的图片张数
COUNT = 0

# 参数:
# dir: 图片保存的目录
# juanshu_num: 卷数
# page: 页数
# 此函数的作用: 下载特定卷的特定页的图片到指定的保存目录
def get_webp(dir, juanshu_num, page):
    # 拼接下载的图片的网址
    base_url = ‘https://mhpic.samanlehua.com/comic/Z%2F‘
    name = urllib.parse.quote(‘足球小将翼‘)
    juanshu = ‘0‘+str(juanshu_num) if juanshu_num<10 else str(juanshu_num)
    juanshu = urllib.parse.quote(‘第%s卷‘%juanshu)
    format = ‘.jpg-noresize.webp‘
    url = base_url+name+‘%2F‘+juanshu+‘%2F‘+str(page)+format
    # print(url)
    try:
        urllib.request.urlretrieve(url, ‘%s/%d.webp‘%(dir, page)) # 下载图片
        print(‘开始转化图片格式:‘)
        os.system(‘dwebp %s/%d.webp -o %s/%d.png‘%(dir, page, dir, page)) # 将图片由webp格式转化为png格式
        print(‘转化图片格式完毕。‘)
        os.system(‘rm -rf %s/%d.webp‘%(dir, page)) # 删除webp格式的图片
    except Exception as err:
        print(err)

# 参数:juanshu_num: 卷数
#       page_num: 该卷的图片张数
# 此函数的作用: 下载某一卷中的所有图片
def download(juanshu_num, page_num):

    # 如果目录不存在,则新建这个目录
    if not os.path.exists(‘/home/tsubasa/卷%s‘%juanshu_num):
        os.mkdir(‘/home/tsubasa/卷%s‘%juanshu_num)
    dir = ‘/home/tsubasa/卷%s‘%juanshu_num
    # 下载每一卷中的所有图片
    for page in range(1, page_num+1):
        try:
            get_webp(dir, juanshu_num, page)
        except urllib.error.HTTPError:
            print(‘该图片不存在或者网络连接错误。‘)
            COUNT += 1

def main():

    start_time = time.time()
    # 每一卷的图片张数, 一共21卷
    page_num_list = [175, 175, 165, 171, 169, 172, 170, 170, 168, 174, 171,
                        168, 168, 168, 176, 169, 171, 167, 166, 172, 172]
    # 设置线程个数为10个
    executor = ThreadPoolExecutor(max_workers=10)  # 可以自己调整max_workers
    # submit()的参数: 第一个为函数, 之后为该函数的传入参数,允许有多个
    # 并发下载图片
    future_tasks = [executor.submit(download, juanshu_num+1, page_num)
                        for juanshu_num,page_num in enumerate(page_num_list)]
    wait(future_tasks, return_when=ALL_COMPLETED) # 等待所有的任务结束
    end_time = time.time()
    print(‘图片下载完毕!一共耗时%s秒。‘%(end_time-start_time))
    print(‘下载失败的图片张数为:%d‘%COUNT)

main()

运行以上程序,静静地等待程序运行完毕,输出的结果如下:

??我们再去Linux中查看已经下好的图片:

一共下载了3577张图片(没有一张下载失败),用了约1521秒,效率杠杠的,哈哈~~

??本文到此就要结束了,最后再加一句:中国足球,加油啊!

注意:本人现已开通两个微信公众号: 因为Python(微信号为:python_math)以及轻松学会Python爬虫(微信号为:easy_web_scrape), 欢迎大家关注哦~~

原文地址:https://www.cnblogs.com/jclian91/p/9374892.html

时间: 2024-08-29 15:49:59

Python爬虫之足球小将动漫(图片)下载的相关文章

(8)分布式下的爬虫Scrapy应该如何做-图片下载(源码放送)

  转载主注明出处:http://www.cnblogs.com/codefish/p/4968260.html 在爬虫中,我们遇到比较多需求就是文件下载以及图片下载,在其它的语言或者框架中,我们可能在经过数据筛选,然后异步的使用文件下载类来达到目的,Scrapy框架中本身已经实现了文件及图片下载的文件,相当的方便,只要几行代码,就可以轻松的搞定下载.下面我将演示如何使用scrapy下载豆瓣的相册首页内容. 优点介绍: 1)自动去重 2)异步操作,不会阻塞 3)可以生成指定尺寸的缩略图 4)计算

Python爬虫入门教程 5-100 27270图片爬取

获取待爬取页面 今天继续爬取一个网站,http://www.27270.com/ent/meinvtupian/ 这个网站具备反爬,so我们下载的代码有些地方处理的也不是很到位,大家重点学习思路,有啥建议可以在评论的地方跟我说说. 为了以后的网络请求操作方向,我们这次简单的进行一些代码的封装操作. 在这里你可以先去安装一个叫做 retrying 的模块 pip install retrying 这个模块的具体使用,自己去百度吧.嘿嘿哒~ 在这里我使用了一个随机产生user_agent的方法 im

Python爬虫入门教程 8-100 蜂鸟网图片爬取之三

啰嗦两句 前几天的教程内容量都比较大,今天写一个相对简单的,爬取的还是蜂鸟,依旧采用aiohttp 希望你喜欢爬取页面https://tu.fengniao.com/15/ 本篇教程还是基于学习的目的,为啥选择蜂鸟,没办法,我瞎选的. 一顿熟悉的操作之后,我找到了下面的链接https://tu.fengniao.com/ajax/ajaxTuPicList.php?page=2&tagsId=15&action=getPicLists 这个链接返回的是JSON格式的数据 page =2页码

python爬虫——爬取NUS-WIDE数据库图片

实验室需要NUS-WIDE数据库中的原图,数据集的地址为http://lms.comp.nus.edu.sg/research/NUS-WIDE.htm   由于这个数据只给了每个图片的URL,所以需要一个小爬虫程序来爬取这些图片.在图片的下载过程中建议使用VPN.由于一些URL已经失效,所以会下载一些无效的图片. 1 # PYTHON 2.7 Ubuntu 14.04 2 nuswide = "$NUS-WIDE-urls_ROOT" #the location of your nu

Python爬虫学习之爬美女图片

最近看机器学习挺火的,然后,想要借助业余时间,来学习Python,希望能为来年找一份比较好的工作. 首先,学习得要有动力,动力,从哪里来呢?肯定是从日常需求之中来.我学Python看网上介绍.能通过Python来编写爬虫,于是,我也的简单的看了一下Python的介绍,主要是Python的一些语法,还有正则表达式. 好了,学习使用Python之前,来给大家看一下我们需要进行爬去的网站: 看到这个网站,感谢美女很养眼的同时,网站的图片也不太过,就是比较性感而已.看到这个多的美女,你想不想要将这些爬取

Python爬虫之——爬取妹子图片

首先声明,本博文为我原创,但是我在看了 崔庆才 博主的文章之后加以自己的实际处理的所得,感谢 崔庆才 博主,写的爬虫文章都好,博主文章地址:http://cuiqingcai.com/3179.html 环境:python 3.6 注:单线程版以在安卓的Qpython(py2.7)上运行成功 第三方库 requests:解析url beautifulsoup4:不会正则表达式童鞋的福音,可以容易的提取到html文件中各种标签及其属性 安装方法: pip install requests pip

Python爬虫——爬取网站的图片

爬虫这东西最早出现在我大学计算机网络的课程上面,我们当时的老师人很好,期末不笔试,他说这东西笔试没什么用,对于一个年纪比较大的老师来讲,能提出这种方式,实在难得.当时在考虑做一个与网络有关的东西好,第一个想到的就是爬虫.想想也没想过用Java写过这种东西,所以当时是一般看一本爬虫的书一边敲代码,现在想起来有很多东西是没有想明白的--我当时爬的是刘末鹏的博客,把全部文章用分类爬了下来,在本地可以打开. 后面老师评价的时候就说,你这个只能爬这个,其实你应该让他智能些,让他可以爬图片,可以爬特定的内容

Python爬虫入门教程:蜂鸟网图片爬取

1. 蜂鸟网图片--简介 国庆假日结束了,新的工作又开始了,今天我们继续爬取一个网站,这个网站为 http://image.fengniao.com/ ,蜂鸟一个摄影大牛聚集的地方,本教程请用来学习,不要用于商业目的,不出意外,蜂鸟是有版权保护的网站. 2. 蜂鸟网图片--网站分析 第一步,分析要爬取的网站有没有方法爬取,打开页面,找分页 http://image.fengniao.com/index.php?action=getList&class_id=192&sub_classid=

Python爬虫抓取糗百的图片,并存储在本地文件夹

思路: 1.观察网页,找到img标签 2.通过requests和BS库来提取网页中的img标签 3.抓取img标签后,再把里面的src给提取出来,接下来就可以下载图片了 4.通过urllib的urllib.urlretrieve来下载图片并且放进文件夹里面(第一之前的准备工作就是获取当前路径然后新建一个文件夹) 5.如果有多张图片,不断的重复3-4 由于爬虫写得少,通过自己的调试,终于写了出来了 下面直接上代码: 1 #coding = 'utf-8' 2 import requests 3 f