创客学院小编给大家带来一点福利,但不是妹子图!不是妹子图!不是妹子图!
敲了130多行代码,利用协程实现漫画下载,亲测没问题,目前海贼王更新到930话,全部下载下来1小时左右,供大家参考,一起共勉。
代码烂了 大神别笑话我。

from gevent import monkey;monkey.patch_all()
from gevent.pool import Pool
from bs4 import BeautifulSoup
from fake_useragent import UserAgent
from requests.packages.urllib3.exceptions import InsecureRequestWarning

import gevent
import requests
import time
import os
import shutil

def getSource(urls, headers, types):
    try:
        # 实例化UserAgent类
        user_agent = UserAgent()
        # 为头文件随机分配User-Agent
        headers['User-Agent'] = user_agent.random
        # 禁用安全请求警告
        requests.packages.urllib3.disable_warnings(InsecureRequestWarning)
        # 实例化Session
        request_session = requests.Session()
        # 设置重连次数
        request_session.mount('http://', requests.adapters.HTTPAdapter(max_retries=5))
        request_session.mount('https://', requests.adapters.HTTPAdapter(max_retries=5))
        # 执行请求
        get_response = request_session.get(urls, headers=headers, verify=False, timeout=(10, 10))
        # 关闭请求
        request_session.close()
        # 设置编码
        get_response.encoding = 'UTF-8'
        # 判断获取源码还是图片
        if types == 'text':
            get_response = get_response.text
        if types == 'content':
            get_response = get_response.content
    except Exception as e:
        print('getSource()函数异常:' + str(e))
    else:
        return get_response

def sourceAnalysis(src, dic, typ):
    # 定义章节链接、标题、内容列表
    chapter_link = []
    chapter_name = []
    chapter_cont = []
    # 实例化BeautifulSoup
    soup = BeautifulSoup(src, 'html.parser')
    # 解析章节链接和标题
    if typ == 'chapter':
        analysis_lists = soup.find_all(dic['label'], class_=dic['class'])
        # 提取章节链接和标题
        for i in range(len(analysis_lists)):
            chapter_link.append(DOMAIN + analysis_lists[i].get('data-hreflink'))
            chapter_name.append(analysis_lists[i].get_text().strip())
        chapter_dic = {'chapter_link': chapter_link, 'chapter_name': chapter_name}
        return chapter_dic
    # 解析章节内图片链接
    if typ == 'content':
        analysis_lists = soup.find_all(dic['label'], class_=dic['class'])
        # 提取章节内图片链接
        for i in range(len(analysis_lists)):
            chapter_cont.append(analysis_lists[i].get('data-src'))
        return chapter_cont

if __name__ == '__main__':
    # 系统启动时间
    start_time = time.time()

# 定义常量
    DOMAIN = 'https://www.mkzhan.com/'
    REQUEST_URL = 'https://www.mkzhan.com/209871/'
    HEADERS = {'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',
               'Accept-Language': 'zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3',
               'Connection': 'keep-alive',
               'User-Agent': ''}
    LINK_PROPERTY = {'label': 'a', 'class': 'j-chapter-link'}
    IMAG_PROPERTY = {'label': 'img', 'class': 'lazy-read'}
    POOL = Pool(100)
    ROOT_PATH = "D:/OnePiece/"

# 创建存储漫画文件夹,如果已有文件夹,则删除再新建
    if os.path.exists(ROOT_PATH):
        shutil.rmtree(ROOT_PATH)
    os.mkdir(ROOT_PATH)

# 获取目录页源码
    function_run_time = time.time()
    print(time.strftime('[%Y-%m-%d %H:%M:%S]', time.localtime()) + " 获取目录页源码开始...")
    catalog_source = getSource(REQUEST_URL, HEADERS, 'text')
    print(time.strftime('[%Y-%m-%d %H:%M:%S]', time.localtime()) + " 获取目录页源码完成...[ %.1fs ]" % (time.time() - function_run_time))

# 解析章节信息
    function_run_time = time.time()
    print(time.strftime('[%Y-%m-%d %H:%M:%S]', time.localtime()) + " 解析章节信息开始...")
    chapter_info = sourceAnalysis(catalog_source, LINK_PROPERTY, 'chapter')
    print(time.strftime('[%Y-%m-%d %H:%M:%S]', time.localtime()) + " 解析章节信息完成...[ %.1fs ]" % (time.time() - function_run_time))

# 获取每章节源码
    function_run_time = time.time()
    print(time.strftime('[%Y-%m-%d %H:%M:%S]', time.localtime()) + " 获取每章节源码开始...")
    get_source_worker = [POOL.spawn(getSource, url, HEADERS, 'text') for url in chapter_info['chapter_link']]
    gevent.joinall(get_source_worker)
    chapter_source = [source.value for source in get_source_worker]
    print(time.strftime('[%Y-%m-%d %H:%M:%S]', time.localtime()) + " 获取每章节源码完成...[ %.1fs ]" % (time.time() - function_run_time))

# 解析章节内图片链接
    function_run_time = time.time()
    print(time.strftime('[%Y-%m-%d %H:%M:%S]', time.localtime()) + " 解析章节内图片链接开始...")
    get_imglink_worker = [POOL.spawn(sourceAnalysis, src, IMAG_PROPERTY, 'content') for src in chapter_source]
    gevent.joinall(get_imglink_worker)
    image_list = [link.value for link in get_imglink_worker]
    print(time.strftime('[%Y-%m-%d %H:%M:%S]', time.localtime()) + " 解析章节内图片链接完成...[ %.1fs ]" % (time.time() - function_run_time))

# 下载漫画
    for i in range(len(chapter_info['chapter_name'])):
        function_run_time = time.time()
        print(time.strftime('[%Y-%m-%d %H:%M:%S]', time.localtime()) + " 下载 " + chapter_info['chapter_name'][i] + " 开始...")
        get_images_worker = [POOL.spawn(getSource, url, HEADERS, 'content') for url in image_list[i]]
        gevent.joinall(get_images_worker)
        # 创建章节文件夹
        save_path = ROOT_PATH + chapter_info['chapter_name'][i] + '/'
        os.mkdir(save_path)
        for j in range(len(get_images_worker)):
            with open(save_path + str(j) + '.jpg', 'wb') as image:
                image.write(get_images_worker[j].value)
        print(time.strftime('[%Y-%m-%d %H:%M:%S]', time.localtime()) + " 下载 " + chapter_info['chapter_name'][i] + " 完成...[ %.1fs ]" % (time.time() - function_run_time))

print(time.strftime('[%Y-%m-%d %H:%M:%S]', time.localtime()) + ' System executing done...[ %.1fs ]' % (time.time() - start_time))

Python群:399932895

130行代码实现海贼王漫画下载相关推荐

  1. 复旦博士用130行代码搞定核酸统计,2分钟解决人工一小时工作量

    整理 | 于轩 出品 | 程序人生 (ID:coder _life) 这段时间以来,全国各地的疫情发展牵动人心.为了更好地配合疫情防控,复旦大学自三月初以来启动了常态化核酸筛查工作. 这一工作要求辅导 ...

  2. Android小说爬虫工具,几行代码实现小说阅读下载

    使用简单的几行代码,打造你自己的小说开源软件,已解析10+个小说网站,支持并发搜索下载,下载速度可达5m/s. GitHub 为了测试顺手实现的渣客户端,轻松就能实现搜索,收藏,追更,下载等功能,目前 ...

  3. 130 行代码模仿火爆抖音的“蚂蚁呀嘿”特效,你学会了吗?

    [CSDN 编者按]最近很火的AI换脸来啦,本文具体操作步骤已献上,快来get一下吧. 作者 | 峰华 出品 | CSDN(ID:CSDNnews) 过去一年,线上视频会议软件异军突起,成为了在家办公 ...

  4. 一百行代码爬取漫画喵

    小喵的唠叨话:这次的博客,讲的是使用python编写一个爬虫工具.为什么要写这个爬虫呢?原因是小喵在看完<极黑的布伦希尔特>这个动画之后,又想看看漫画,结果发现各大APP都没有资源,最终好 ...

  5. 那些下载不了的视频,Python只用1行代码就能直接下载

    现在有很多网站都并不支持直接下载的,例如我们常去的B站里面的视频,在页面是没有下载按钮的,还有的视频需要我们下载客户端才能下载-虽然这并不能拦住多少人,有些聪明的小伙伴就会去下载一些第三方软件去下载, ...

  6. Jquery+javaScrpt 130行代码实现打地鼠游戏

    源码下载地址 (不需要积分关注我就可以下载):打地鼠 有不懂得可以私信问我. 先上图,这是打地鼠的运行状态页面 本页面主要实现功能 点击开始按钮 ​ |-- 计时开始任务 ​ |-- 地鼠出现任务 . ...

  7. 核酸结果统计难?130行代码实现基于ocr的核酸截图识别存储Excel(复现代码核查核酸报告)

    来源: 核酸结果统计难?复旦博士生的操作火了https://m.gmw.cn/baijia/2022-04/08/35644611.html 1 程序背景 学校要收核酸截图,汇总太麻烦了,故将OCR整 ...

  8. Python 小型课设作业,仅200行代码,使用youtube-dl下载视频,使用OpenCV和ffmpeg处理视频成字符视频

    一.程序背后的小故事:    因为不想像传统的课设作业一样做一个很多人做过的小游戏,管理程序等,所以花了很长时间在选择一个有趣的程序方向,突然想起来以前看到的字符跳舞视频,突然引起了我的兴趣.分析字符 ...

  9. 复旦博士写了130行代码搞定核酸统计

最新文章

  1. 使用Python中的卷积神经网络进行恶意软件检测
  2. 浅议Windows 2000/XP Pagefile组织管理
  3. Py之face_alignment:face_alignment库的简介、安装、使用方法之详细攻略
  4. pythoncad二次开发视频_AutoCAD ObjectARX 二次开发(2020版)--4,使用ARX向导创建CAD二次开发项目(编程框架)--...
  5. 服务器屏蔽非法app请求
  6. UC 国际信息流推荐中的多语言内容理解
  7. oracle11g怎样进行闪回,模拟Oracle11g下用Flashback Data Archive进行恢复的若干场景
  8. win10打开无线网卡服务器,win10打不开无线网卡
  9. windows快捷键之预览窗格
  10. 马克思主义原理 - 圣才思维导图
  11. 股市里的定律-福克兰定律
  12. 安装了智能家居设备后会影响传统家居的使用吗?
  13. UIStepper (加减符号)(步进控件)
  14. 计算机专业总人数所占比例公式,excel统计数据所占比例的教程详解
  15. 微信小程序使用云函数进行mysql操作
  16. Python哲学之import this,诠释代码之美
  17. STM32硬件I2C与软件模拟I2C超详解
  18. ROS语音交互系统_(1)科大讯飞linux版TTS代码解析
  19. Java毕设项目奥利给共享自习室系统(java+VUE+Mybatis+Maven+Mysql)
  20. 数独求解:用c++做一个数独求解的程序(附源代码和.exe文件)

热门文章

  1. 品牌与商家如何做电商直播运营的呢?
  2. JAVA动态代理Porxy
  3. 涛涌天际,水利万物:黄浦江畔读懂城市智能体
  4. android 编辑说说页面,QQ说说已经发表了怎么修改?
  5. 计算机图形学中消隐的相关概念及算法
  6. winrar6.0汉化中文版 v6.00烈火版
  7. PotPlayer老是提醒更新,怎么禁止PotPlayer联网?
  8. GO 语言中模板渲染的原理
  9. 计算机网络学网络制图吗,计算机网络论文发表简述计算机设计制图教学改革
  10. 量化投资入门指南:风险模型和交易成本模型