130行代码实现海贼王漫画下载
创客学院小编给大家带来一点福利,但不是妹子图!不是妹子图!不是妹子图!
敲了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行代码实现海贼王漫画下载相关推荐
- 复旦博士用130行代码搞定核酸统计,2分钟解决人工一小时工作量
整理 | 于轩 出品 | 程序人生 (ID:coder _life) 这段时间以来,全国各地的疫情发展牵动人心.为了更好地配合疫情防控,复旦大学自三月初以来启动了常态化核酸筛查工作. 这一工作要求辅导 ...
- Android小说爬虫工具,几行代码实现小说阅读下载
使用简单的几行代码,打造你自己的小说开源软件,已解析10+个小说网站,支持并发搜索下载,下载速度可达5m/s. GitHub 为了测试顺手实现的渣客户端,轻松就能实现搜索,收藏,追更,下载等功能,目前 ...
- 130 行代码模仿火爆抖音的“蚂蚁呀嘿”特效,你学会了吗?
[CSDN 编者按]最近很火的AI换脸来啦,本文具体操作步骤已献上,快来get一下吧. 作者 | 峰华 出品 | CSDN(ID:CSDNnews) 过去一年,线上视频会议软件异军突起,成为了在家办公 ...
- 一百行代码爬取漫画喵
小喵的唠叨话:这次的博客,讲的是使用python编写一个爬虫工具.为什么要写这个爬虫呢?原因是小喵在看完<极黑的布伦希尔特>这个动画之后,又想看看漫画,结果发现各大APP都没有资源,最终好 ...
- 那些下载不了的视频,Python只用1行代码就能直接下载
现在有很多网站都并不支持直接下载的,例如我们常去的B站里面的视频,在页面是没有下载按钮的,还有的视频需要我们下载客户端才能下载-虽然这并不能拦住多少人,有些聪明的小伙伴就会去下载一些第三方软件去下载, ...
- Jquery+javaScrpt 130行代码实现打地鼠游戏
源码下载地址 (不需要积分关注我就可以下载):打地鼠 有不懂得可以私信问我. 先上图,这是打地鼠的运行状态页面 本页面主要实现功能 点击开始按钮 |-- 计时开始任务 |-- 地鼠出现任务 . ...
- 核酸结果统计难?130行代码实现基于ocr的核酸截图识别存储Excel(复现代码核查核酸报告)
来源: 核酸结果统计难?复旦博士生的操作火了https://m.gmw.cn/baijia/2022-04/08/35644611.html 1 程序背景 学校要收核酸截图,汇总太麻烦了,故将OCR整 ...
- Python 小型课设作业,仅200行代码,使用youtube-dl下载视频,使用OpenCV和ffmpeg处理视频成字符视频
一.程序背后的小故事: 因为不想像传统的课设作业一样做一个很多人做过的小游戏,管理程序等,所以花了很长时间在选择一个有趣的程序方向,突然想起来以前看到的字符跳舞视频,突然引起了我的兴趣.分析字符 ...
- 复旦博士写了130行代码搞定核酸统计
最新文章
- 使用Python中的卷积神经网络进行恶意软件检测
- 浅议Windows 2000/XP Pagefile组织管理
- Py之face_alignment:face_alignment库的简介、安装、使用方法之详细攻略
- pythoncad二次开发视频_AutoCAD ObjectARX 二次开发(2020版)--4,使用ARX向导创建CAD二次开发项目(编程框架)--...
- 服务器屏蔽非法app请求
- UC 国际信息流推荐中的多语言内容理解
- oracle11g怎样进行闪回,模拟Oracle11g下用Flashback Data Archive进行恢复的若干场景
- win10打开无线网卡服务器,win10打不开无线网卡
- windows快捷键之预览窗格
- 马克思主义原理 - 圣才思维导图
- 股市里的定律-福克兰定律
- 安装了智能家居设备后会影响传统家居的使用吗?
- UIStepper (加减符号)(步进控件)
- 计算机专业总人数所占比例公式,excel统计数据所占比例的教程详解
- 微信小程序使用云函数进行mysql操作
- Python哲学之import this,诠释代码之美
- STM32硬件I2C与软件模拟I2C超详解
- ROS语音交互系统_(1)科大讯飞linux版TTS代码解析
- Java毕设项目奥利给共享自习室系统(java+VUE+Mybatis+Maven+Mysql)
- 数独求解:用c++做一个数独求解的程序(附源代码和.exe文件)