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中查看已经下好的图片:


21卷动漫

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

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

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

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 214,444评论 6 496
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,421评论 3 389
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 160,036评论 0 349
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,363评论 1 288
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,460评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,502评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,511评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,280评论 0 270
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,736评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,014评论 2 328
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,190评论 1 342
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,848评论 5 338
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,531评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,159评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,411评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,067评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,078评论 2 352

推荐阅读更多精彩内容

  • 昨夜戌时上床 只待明晨不忙 眼瞅要入梦乡 孰料牙疼惶惶 惆怅,惆怅 翻来覆去心殇 时间慢慢流淌 疼痛依然嚣张 着我...
    温火火阅读 606评论 0 47
  • 长寿寄长寿,天年岂可偷。 恶行回首改,善念入心修。 佳话四邻好,退墙三尺留。 何时情意浅,冷面掩深楼。
    沈明东阅读 154评论 0 1
  • 爷爷已经去世四年了,一直想写篇文字来悼念他,却总是不知从何写起。 爷爷的一生颇多坎坷。他出生在解放前的佃农家里,刚...
    晓敏啦阅读 175评论 0 0