资讯专栏INFORMATION COLUMN

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

tolerious / 1729人阅读

摘要:本届世界杯中,在日本与比利时的比赛中,日本球迷们高举队长小翼的画面就足以证明这部动漫对日本足球的深远影响。本文将介绍如何利用爬虫来下载足球小将的动漫图片。

  尽管俄罗斯世界杯的热度已经褪去,但这届世界杯还是给全世界人民留下了无数难忘的回忆,不知你的回忆里有没有日本队的身影?本次世界杯中,日本队的表现让人眼前一亮,很难想象,就是这样一只队伍,二十几年还是我们国家足球队的水平一样,也许还不如我们国足呢。
  足球小将(队长小翼、キャプテン翼)由日本著名动漫家高桥阳一于1981年开始连载,从此这部动漫就伴随着一代又一代的日本,甚至全世界的少年儿童成长,也在无形有形中促进了日本足球的进步。本届世界杯中,在日本与比利时的比赛中,日本球迷们高举队长小翼的画面就足以证明这部动漫对日本足球的深远影响。
  本文将介绍如何利用Python爬虫来下载足球小将的动漫图片。
  首先,我们需要下载的网址为:https://mhpic.samanlehua.com/..., 截图如下:

我们注意到,在这个网址中,只有卷数和动漫图片的序号在发生改变,因此,我们只需要找到总共的卷数以及每一卷中所包含的图片即可完成此爬虫。
  不过稍微需要注意的是,爬虫下载下来的图片格式为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.ucloud.cn/yun/42082.html

相关文章

  • 首次公开,整理12年积累的博客收藏夹,零距离展示《收藏夹吃灰》系列博客

    摘要:时间永远都过得那么快,一晃从年注册,到现在已经过去了年那些被我藏在收藏夹吃灰的文章,已经太多了,是时候把他们整理一下了。那是因为收藏夹太乱,橡皮擦给设置私密了,不收拾不好看呀。 ...

    Harriet666 评论0 收藏0
  • 零基础如何学爬虫技术

    摘要:楚江数据是专业的互联网数据技术服务,现整理出零基础如何学爬虫技术以供学习,。本文来源知乎作者路人甲链接楚江数据提供网站数据采集和爬虫软件定制开发服务,服务范围涵盖社交网络电子商务分类信息学术研究等。 楚江数据是专业的互联网数据技术服务,现整理出零基础如何学爬虫技术以供学习,http://www.chujiangdata.com。 第一:Python爬虫学习系列教程(来源于某博主:htt...

    KunMinX 评论0 收藏0
  • 小白都懂的Python爬虫网易云音乐下载

    摘要:完整代码如下正在下载根据网易云歌曲的直接下载歌曲上安装爬取网易云歌曲源码地址 首发知乎:https://zhuanlan.zhihu.com/p/... 目标 偶然的一次机会听到了房东的猫的《云烟成雨》,瞬间迷上了这慵懒的嗓音和学生气的歌词,然后一直去循环听她们的歌。然后还特意去刷了动漫《我是江小白》,好期待第二季... 我多想在见你,哪怕匆匆一眼就别离... 好了,不说废话了。这次...

    SoapEye 评论0 收藏0
  • nodejs做的爬虫,爬取腾讯动漫的内容

    摘要:首先上再上一定要设置的编码为否则会下载下来的图片打不开最后是说明引入必须的模块,函数接收,并在回调里处理数据。,函数里,定义数据源,这里用的是腾讯动漫,循环处理数据内容,里面的函数,即保存图片到本地。 首先上package.json { name: Spider, version: 1.0.0, description: spider , main: index.js,...

    godruoyi 评论0 收藏0
  • Python爬虫多线程下载豆瓣Top250电影图片

    摘要:本次爬虫项目将会用到模块中的类,多线程豆瓣电影图片。总结通过上述两个爬虫程序的对比,我们不难发现,同样是下载豆瓣电影,个网页中的图片,在没有使用多线程的情况下,总共耗时约,而在使用多线程个线程的情况下,总共耗时约秒,效率整整提高了约倍。 爬虫项目介绍   本次爬虫项目将爬取豆瓣Top250电影的图片,其网址为:https://movie.douban.com/top250, 具体页面如...

    shiyang6017 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<