【实例简介】

【实例截图】

【核心代码】

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文件相关推荐

  1. 用python画圣诞树、樱花树、卡通图案及打包成exe文件

    文章目录 用python画圣诞树.樱花树.卡通图案及打包成exe文件 效果 1.圣诞树--朴素 2.圣诞树--可爱 3.圣诞树--飘雪 4.樱花树--飘落效果 5.樱花树--暖色调 6.哆啦a梦 用p ...

  2. keil生成hex文件找不到_骚操作!用Python把公众号文章打包成pdf文件,再也不怕找不到了...

    背景 做自媒体的人,尤其是做了一年甚至更久的自媒体人,尤其是通过自媒体还有一些小收入的人,他们最怕自己的公众号内容因为各种原因而丢失,那就太可怕了! 在做自媒体内容上花了太多心血,如果突然一下就没了, ...

  3. Python打包成exe文件_详细操作

    Python打包成exe文件 前言 一.安装pyinstaller 1.1 安装pyinstaller,使用安装命令: 1.2 如果遇到需要更新版本请输入: 1.3 检查是否正确安装 1.4 稍等,水 ...

  4. python 概率分布模型_使用python的概率模型进行公司估值

    python 概率分布模型 Note from Towards Data Science's editors: While we allow independent authors to publis ...

  5. python如何将图片打包进exe里_史上最详细的Python打包成exe文件教程

    打包成exe文件可以让python代码在没有python环境的条件下,依然能够运行,实在是码农们写追女朋友表白.情人节浪漫的必需品! 1.使用豆瓣镜像源下载: pyinstaller 有需要了解如何使 ...

  6. python编程方式_自学python编程的方法路线

    怎么自学python编程 如何自学Python编程?一堆的Python教程却感觉无从下手呢?我想这应该是很多Python初学者正在纠结的问题. 今天想要分享给大家的是如何自学Python编程,学习这件 ...

  7. python tkinter库、添加gui界面_使用Python中tkinter库简单gui界面制作及打包成exe的操作方法(二)...

    使用Python中tkinter库简单gui界面制作及打包成exe的操作方法(二),创建一个,界面,布局,文件,路径 使用Python中tkinter库简单gui界面制作及打包成exe的操作方法(二) ...

  8. python文件图标变成小电脑_手把手教你给Python程序写图形界面,并且打包成exe文件-exe文件...

    环境配置 官网下载Python3,LZ的配置环境是Python3.6,PyCharm 2017.2.1pip3 install PyQt5 #下载PyQt5 pip install PyQt5-too ...

  9. python 时间序列预测_使用Python进行动手时间序列预测

    python 时间序列预测 Time series analysis is the endeavor of extracting meaningful summary and statistical ...

最新文章

  1. ThinkPHP 框架学习
  2. Win7下删除FOXMAIL右键发送到选项
  3. CommonsMultipartFile 转为 File 类型
  4. android studio gradle 国内代理
  5. “约见”面试官系列之常见面试题第九篇vue实现双向绑定原理(建议收藏)
  6. web前端——transform变形 旋转角度正负的判断
  7. Playfab开发(一)如何调用PlayFab接口
  8. 首席赚钱省钱专家小程序1.5.8+前端
  9. Android基于Socket无线遥控 - 模拟触摸按键篇framework jar
  10. Tensroflow练习,包括强化学习、推荐系统、nlp等
  11. 学生信息管理系统(c++源代码实现)
  12. Windows安装Linux, (WSL)Windows Subsystem for Linux
  13. Vmware里安装 Ubuntu16.04 + 安装Vmware-tools
  14. Vue实现打印机接口打印组件
  15. 代码调用SPSS功能执行分析
  16. Excel同时冻结多行多列
  17. 诞生11年,入华9年,今年的智慧城市会更好吗?
  18. 编程初学者必备的基础知识
  19. 信创培训第一课:linux操作系统基础
  20. 马斯克的这波神操作,让我意识到保持写代码的能力有多重要

热门文章

  1. Linux配置协同工作目录,Linux学习二:文件权限与目录配置
  2. qlabel 边加载边更新_盘点十四款国产进口边三轮,挎斗子摩托车,售价从1万至60多万...
  3. 阿里二面,原来我对自动化测试的理解太浅了
  4. 学霸学长如何第一时间收到接口报错?不用测试妹子再质疑你是不是接口挂了
  5. 3780mysql_MySQL添加外键Foreign Keys出错,报错[HY000][3780]
  6. Python之初识函数
  7. html鼠标悬停出现新元素,CSS:我如何将鼠标悬停在一个元素上,并显示另一个元素?...
  8. 小程序动态class_微盛小程序“圈子动态”来了!仿朋友圈发布动态,引流拓客神器...
  9. php在dw中设置按钮圆角,Dreamweaver怎么用CSS制作圆角按钮?
  10. mfc中picture control的用法_可能是最被误用的 HTTP 响应头之一 Cache-Control: must-revalidate