130行代码实现海贼王漫画下载

news/2024/11/29 13:45:40/

创客学院小编给大家带来一点福利,但不是妹子图!不是妹子图!不是妹子图!
敲了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


http://www.ppmy.cn/news/291416.html

相关文章

python绘画海贼王_入门级项目实战,Python生成海贼王云图!

本教程适合于有一定编程经验的同学,使用Python3,在jupyter进行调试开发。 涉及的Python基础包括: 变量和函数的定义和使用 如果你感觉学不会?莫慌,小编推荐大家加入群, 前面516中间107后面834,群…

用HTML与CSS写海贼王旋转木马图

1.效果图 海贼王木马 2.实现原理 2.1 首先利用transform中的rotateY和translateZ属性移动图片,使图片围成一圈;(最中间的图片不需要设置任何属性,可以作为其他图片的位置参考) 2.2 利用animation动画使全部图片开始旋…

漫画信息爬虫之爬取海贼王全彩漫画图片

制作工具模块 -隐藏身份信息的User-Agent模块;对象服务器识别不了身份信息。 import random user_agent_data [{"User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3314.0 Safari/537.36…

python画海贼王_用python自动爬取海贼王漫画推送kindle

原标题:用python自动爬取海贼王漫画推送kindle 链接: 之前闲着无聊,想找个项目练练手,这时我看到正在压着泡面的kindle。 就你了,之前一直想在kindle上看漫画,可是想到又得下载资源还得发送到kindle&#x…

python海贼王logo_Python 学习笔记---爬取海贼王动漫

最近无聊整理的爬虫代码,可以自动爬取腾讯动漫的任意漫画,思路如下: 1. 先获取想下载的动漫url, 这里用了 getUrls ,直接获取动漫的最后一章 2. 然后进入到该动漫去获取要下载的图片url 3. 下载到本地 import os impor…

python海贼王logo_Python入门之生成海贼王云图

本教程适合于有一定编程经验的同学,使用Python3,在Jupyter进行调试开发。 涉及的Python基础包括:变量和函数的定义和使用 列表和字典等数据结构的使用 条件和循环语句,if、for等 模块的导入和使用,import语法 需要安装…

python海贼王logo_Python 实现的下载op海贼王网的图片(网络爬虫)

没得事就爬一下我喜欢的海贼王上的图片 需要在d盘下建立一个imgcache文件夹 # -*- coding: utf-8 -*- import urllib import urllib2 import json from bs4 import BeautifulSoup import threadpool import thread class htmlpaser: def __init__(self): self.urlhttp://1.hzfa…

python海贼王logo_Python实现的下载op海贼王网的图片

没得事就爬一下我喜欢的海贼王上的图片 需要在d盘下建立一个imgcache文件夹 # -*- coding: utf-8 -*- import urllib import urllib2 import json from bs4 import BeautifulSoup import threadpool import thread class htmlpaser: def __init__(self): self.urlhttp://1.hzfa…