看漫画学python pdf下载_用python下载漫画并打包成pdf文件
【实例简介】
【实例截图】
【核心代码】
import requests
import time
import json
import re
import os
import img2pdf
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
from fake_useragent import UserAgent
from urllib.parse import urlencode, urljoin, unquote
from lxml import etree
from threading import Thread
base_url = 'https://www.manhuatai.com/'
headers = {
'referer': 'https://www.manhuatai.com/',
'user-agent': UserAgent(verify_ssl=False).random,
}
# 搜索接口,返回搜索列表
def get_search_items(keyword):
"""
:param keyword:
:return:
"""
headers.update({
'x-requested-with': 'XMLHttpRequest'
})
params = {
'd': int(time.time()),
'q': keyword,
}
params = urlencode(params)
res = requests.get('https://www.manhuatai.com/getjson.shtml?', headers=headers, params=params).content.decode('utf-8')
results = json.loads(res)
for index, item in enumerate(results):
print('编号:{}'.format(index))
print('名字:{}'.format(item['cartoon_name']))
print('id:{}'.format(item['cartoon_id']))
print('状态:{}'.format(item['cartoon_status_id']))
print('最新章节:{}'.format(item['latest_cartoon_topic_name']))
print('=' * 50)
return results
# 获取所搜索的漫画章节列表
def get_comic_list(cartoon_name, remove_fw=False):
url = urljoin(base_url, cartoon_name)
res = requests.get(url, headers=headers).content.decode('utf-8')
# print(res)
doc = etree.HTML(res)
c_img = doc.xpath('//*[@id="offlinebtn-container"]/img/@data-url')[0]
c_name = doc.xpath('/html/body/div[1]/div[3]/div/div[1]/div/div[2]/div[2]/ul/li[1]/text()')[0]
c_status = doc.xpath('/html/body/div[1]/div[3]/div/div[1]/div/div[2]/div[2]/ul/li[2]/text()')[0]
c_author = doc.xpath('/html/body/div[1]/div[3]/div/div[1]/div/div[2]/div[2]/ul/li[3]/text()')[0]
c_type = doc.xpath('/html/body/div[1]/div[3]/div/div[1]/div/div[2]/div[2]/ul/li[4]/text()')[0]
c_update = doc.xpath('/html/body/div[1]/div[3]/div/div[1]/div/div[2]/div[2]/ul/li[5]/text()')[0]
print(c_img, c_name, c_status, c_author, c_type, c_update)
# 获取所有下载链接
chapter_list = doc.xpath('//*[@id="topic1"]/li/a/@href')[::-1]
print(chapter_list, chapter_list[::-1])
# if remove_fw:
# chapter_list = list(filter(lambda x: isinstance(int, x.split('/')[-1].split('.')[0]), chapter_list))
# chapter_list_ = list()
if remove_fw:
for index, item in enumerate(chapter_list):
if item.split('/')[-1].split('.')[0][:2] == 'fw':
print(item)
del chapter_list[index]
# print(chapter_list)
return chapter_list
# 分析解析规则并批量下载
def get_parse_format(r_url):
url = urljoin(base_url, r_url)
driver.get(url)
source = driver.page_source
# print(source)
img_url = re.search('
print(img_url)
total_page_num = re.search('第1/(\d )页', source).group(1)
# 引 || 第8话 || 8话GQ
re_text = re.search('(.*?)/comic/(.*?)%2F(.*?)%2F(.*?)%E8%AF%9D(.*?)%2F(\d ).jpg-', img_url)
try:
mh_domain = re_text.group(1)
mh_tou = re_text.group(2)
mh_name = re_text.group(3)
mh_cp_num = unquote(re_text.group(4))
print(mh_cp_num)
mh_char = re_text.group(5)
mh_num = re_text.group(6)
print(total_page_num, mh_domain, mh_tou, mh_name, mh_cp_num, mh_char, mh_num)
for i in range(1, int(total_page_num) 1):
t = Thread(target=download, args=(mh_domain, mh_tou, mh_name, mh_cp_num, mh_char, i,))
t.start()
except AttributeError:
print('非正文图片{}'.format(url))
def download(mh_domain, mh_tou, mh_name, mh_cp_num, mh_char, i):
url = '{}/comic/{}%2F{}%2F{}%E8%AF%9D{}%2F{}.jpg-mht.middle.jpg'.format(mh_domain, mh_tou, mh_name, mh_cp_num, mh_char, i)
# [img]https://mhpic.manhualang.com/comic/D%2F%E6%96%97%E7%BD%97%E5%A4%A7%E9%99%86%E6%8B%86%E5%88%86%E7%89%88%2F%E7%95%AA%E5%A4%96%E7%AF%8722GQ%2F1.jpg[/img]-mht.middle.webp
print(url)
res = requests.get(url, headers=headers).content
cp_num, sec_num = re.search('(\d )', mh_cp_num).group(1), i
if len(mh_cp_num) < 3:
cp_num = '0' * (3 - len(cp_num)) cp_num
if i < 1000:
sec_num = '0' * (3 - len(str(i))) str(i)
with open('./{}/第{}话-{}节.jpg'.format(dir_name, cp_num, sec_num), 'wb') as f:
f.write(res)
# 打包成pdf
def pack_to_pdf(dir_name):
a4inpt = (img2pdf.mm_to_pt(210), img2pdf.mm_to_pt(297))
layout_fun = img2pdf.get_layout_fun(a4inpt)
file_list = list()
for root, dirs, files in os.walk(dir_name):
for file in files:
if file.endswith('.jpg'):
pathname1 = os.path.join(root, file)
file_list.append(pathname1)
file_lis_list = list()
while file_list:
try:
file_lis_list.append(file_list[:501])
del file_list[:501]
except IndexError:
file_lis_list.append(file_list[:-1])
del file_list[::]
for index, item in enumerate(file_lis_list):
try:
with open('{}/{}.pdf'.format(dir_name, index 1), 'wb') as f:
f.write(img2pdf.convert(item, layout_fun=layout_fun))
except Exception as e:
print(e.args, item)
else:
print(item)
if __name__ == '__main__':
search_words = input('请输入你要查找的内容:>>')
search_results = get_search_items(search_words)
choice = input('请选择要下载第几个?(选择对应漫画的编号)')
# remove_side_story = input('是否去掉番外篇?Y/N')
dir_name = search_results[int(choice)]['cartoon_name']
if not os.path.exists(dir_name):
os.mkdir(dir_name)
mh_list = get_comic_list(search_results[int(choice)]['cartoon_id'], '(⊙o⊙)…' != '')
options = Options()
options.add_argument('--headless')
options.add_argument('--disable-gpu')
driver = webdriver.Chrome(chrome_options=options)
for mh in mh_list:
get_parse_format(mh)
print("main")
pack_to_pdf(dir_name)
看漫画学python pdf下载_用python下载漫画并打包成pdf文件相关推荐
- 用python画圣诞树、樱花树、卡通图案及打包成exe文件
文章目录 用python画圣诞树.樱花树.卡通图案及打包成exe文件 效果 1.圣诞树--朴素 2.圣诞树--可爱 3.圣诞树--飘雪 4.樱花树--飘落效果 5.樱花树--暖色调 6.哆啦a梦 用p ...
- keil生成hex文件找不到_骚操作!用Python把公众号文章打包成pdf文件,再也不怕找不到了...
背景 做自媒体的人,尤其是做了一年甚至更久的自媒体人,尤其是通过自媒体还有一些小收入的人,他们最怕自己的公众号内容因为各种原因而丢失,那就太可怕了! 在做自媒体内容上花了太多心血,如果突然一下就没了, ...
- Python打包成exe文件_详细操作
Python打包成exe文件 前言 一.安装pyinstaller 1.1 安装pyinstaller,使用安装命令: 1.2 如果遇到需要更新版本请输入: 1.3 检查是否正确安装 1.4 稍等,水 ...
- python 概率分布模型_使用python的概率模型进行公司估值
python 概率分布模型 Note from Towards Data Science's editors: While we allow independent authors to publis ...
- python如何将图片打包进exe里_史上最详细的Python打包成exe文件教程
打包成exe文件可以让python代码在没有python环境的条件下,依然能够运行,实在是码农们写追女朋友表白.情人节浪漫的必需品! 1.使用豆瓣镜像源下载: pyinstaller 有需要了解如何使 ...
- python编程方式_自学python编程的方法路线
怎么自学python编程 如何自学Python编程?一堆的Python教程却感觉无从下手呢?我想这应该是很多Python初学者正在纠结的问题. 今天想要分享给大家的是如何自学Python编程,学习这件 ...
- python tkinter库、添加gui界面_使用Python中tkinter库简单gui界面制作及打包成exe的操作方法(二)...
使用Python中tkinter库简单gui界面制作及打包成exe的操作方法(二),创建一个,界面,布局,文件,路径 使用Python中tkinter库简单gui界面制作及打包成exe的操作方法(二) ...
- python文件图标变成小电脑_手把手教你给Python程序写图形界面,并且打包成exe文件-exe文件...
环境配置 官网下载Python3,LZ的配置环境是Python3.6,PyCharm 2017.2.1pip3 install PyQt5 #下载PyQt5 pip install PyQt5-too ...
- python 时间序列预测_使用Python进行动手时间序列预测
python 时间序列预测 Time series analysis is the endeavor of extracting meaningful summary and statistical ...
最新文章
- ThinkPHP 框架学习
- Win7下删除FOXMAIL右键发送到选项
- CommonsMultipartFile 转为 File 类型
- android studio gradle 国内代理
- “约见”面试官系列之常见面试题第九篇vue实现双向绑定原理(建议收藏)
- web前端——transform变形 旋转角度正负的判断
- Playfab开发(一)如何调用PlayFab接口
- 首席赚钱省钱专家小程序1.5.8+前端
- Android基于Socket无线遥控 - 模拟触摸按键篇framework jar
- Tensroflow练习,包括强化学习、推荐系统、nlp等
- 学生信息管理系统(c++源代码实现)
- Windows安装Linux, (WSL)Windows Subsystem for Linux
- Vmware里安装 Ubuntu16.04 + 安装Vmware-tools
- Vue实现打印机接口打印组件
- 代码调用SPSS功能执行分析
- Excel同时冻结多行多列
- 诞生11年,入华9年,今年的智慧城市会更好吗?
- 编程初学者必备的基础知识
- 信创培训第一课:linux操作系统基础
- 马斯克的这波神操作,让我意识到保持写代码的能力有多重要
热门文章
- Linux配置协同工作目录,Linux学习二:文件权限与目录配置
- qlabel 边加载边更新_盘点十四款国产进口边三轮,挎斗子摩托车,售价从1万至60多万...
- 阿里二面,原来我对自动化测试的理解太浅了
- 学霸学长如何第一时间收到接口报错?不用测试妹子再质疑你是不是接口挂了
- 3780mysql_MySQL添加外键Foreign Keys出错,报错[HY000][3780]
- Python之初识函数
- html鼠标悬停出现新元素,CSS:我如何将鼠标悬停在一个元素上,并显示另一个元素?...
- 小程序动态class_微盛小程序“圈子动态”来了!仿朋友圈发布动态,引流拓客神器...
- php在dw中设置按钮圆角,Dreamweaver怎么用CSS制作圆角按钮?
- mfc中picture control的用法_可能是最被误用的 HTTP 响应头之一 Cache-Control: must-revalidate