吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 27446|回复: 118
收起左侧

[Python 转载] python 知音漫客所有漫画下载,付费漫画下载

  [复制链接]
考拉熊 发表于 2018-11-11 21:57
本帖最后由 考拉熊 于 2018-12-2 17:59 编辑

12月02日更新。老版本无法下载漫画已解决,(链接在最后)

重点,付费的漫画可免费下载哦。算不算福利
我已经打包好exe,没有安装环境的同学也可以使用了。云盘链接在下面

https://pan.baidu.com/s/1TrUZHgMQ3rg2mPi-FieXpQ
提取码:2te7

本程序可以下载知音漫客所有漫画:

只需要运行程序输入相应的漫画名字就可以了


173009jv8tij8t1otzwczz.png 173009jprp1vgxth0mt5z5.png


第一次尝试做这个下载漫画的代码

5天时间,遇到了各种问题,
终于作品出来了,
目前还有点瑕疵,后续再修改












[Python] 纯文本查看 复制代码

[list=1]
[*]#注意,要用到谷歌无头浏览器哦,,可以自己去安装,
[*]import os
[*]import re
[*]import requests
[*]from tkinter import *
[*]from lxml import etree
[*]
[*]# 导入chrome无头浏览器
[*]from selenium import webdriver
[*]from selenium.webdriver.chrome.options import Options
[*]
[*]'''
[*]下面的函数作用及功能:
[*]1,获取到要下载书籍的最新(最大)章节,以便后面遍历章节需要。
[*]2,获取到每一章节的名字与url,
[*]3,遍历每一章节的url,获取到每一章节一共有多少分页(话)
[*]4,调用函数【url_key(url) # 获取到最新章节图片的url,分析规则。】
[*]5,调用函数【save_img(ZhangJie, pn_high, book_names, html) # 进行图片保存】
[*]'''
[*]
[*]
[*]def all_all(url, book_names):
[*]    headers = {
[*]        'User-Agent': 'Mozilla/5.0(Windows NT 10.0; Win64; x64)AppleWebKit/537.36(KHTML,like Gecko)Chrome/70.0.3538.77Safari/537.36',
[*]    }
[*]    req = requests.get(url, headers=headers)  # .content#proxies=
[*]    html = etree.HTML(req.text)
[*]
[*]    pn_list = []  # 获取最新章节,或者是最大的章节
[*]    url_keys = []
[*]    for i in range(1, 5):  # 获取前5个章节
[*]        pn2 = html.xpath('//*[@id="chapterList"]/li[{}]/a/@title'.format(i))
[*]        pn2 = re.findall('\d+', str(pn2))
[*]        if len(pn2) > 0:
[*]            # print(pn2[0],333333333333)
[*]            url_k = html.xpath('//*[@id="chapterList"]/li[{}]/a/@href'.format(i))  # 获取到最大章节的url
[*]            url_keys.append(url_k[0])  # 将最大章节URL 返回
[*]            pn_list.append(pn2[0])  # 将最大章节 返回
[*]    pn = max(pn_list)  # 返回最大的章节
[*]
[*]    confirmLabel.delete(0, END)  # 清空文本框
[*]    confirmLabel.insert(END, '{}一共有{}章'.format(book_names, pn), '\n', )  # 打印到GUI界面
[*]    confirmLabel.insert(END, '图片将保存在本程序运行的文件夹,请注意查看哦', '\n')  # 打印到GUI界面
[*]    window.update()  # 刷新文本框显示内容
[*]
[*]    htmls = url_key(url + url_keys[pn_list.index(pn)])  # 查找pn在列表里面的第几个,相应的取第几个URL
[*]
[*]    save_img(int(pn), url, book_names, htmls, html)
[*]
[*]
[*]# 获取到最新章节图片的url,分析规则。
[*]def url_key(url):
[*]    chrome_options = Options()
[*]    chrome_options.add_argument("--headless")
[*]    driver = webdriver.Chrome(chrome_options=chrome_options)
[*]
[*]    driver.get(url)
[*]    webpage = driver.page_source
[*]    driver.close()
[*]    return webpage  # 返回最新一章的页面内容,用作查看url规则
[*]
[*]
[*]# 保存图片函数
[*]def save_img(ZhangJie, url, book_names, htmls, html):
[*]    htmlsf = etree.HTML(htmls)
[*]    req = htmlsf.xpath('/html/body/div[1]/div[1]/div[2]/div[1]/img/@src')
[*]    urls = str(req)
[*]    s = re.findall('%E8%AF%9D.*%2F1', urls)
[*]    url_key = re.sub('%E8%AF%9D|%2F1|\[\'|\'|\]', '', str(s))
[*]    url_tou = re.sub('2F\d+\S+|\[\'', '', urls)
[*]    for i in range(1, ZhangJie + 1):
[*]        # for pn in range(1, int(pn_high[i - 1]) + 1):
[*]        # 获取到每一章节的名字与url
[*]        pnx = html.xpath(
[*]            '//*[@id="chapterList"]/li[{}]/a/@title|//*[@id="chapterList"]/li[{}]/a/@href'.format(i, i))
[*]        if str(pnx).find('话') >= 0:
[*]            req = requests.get(url + pnx[0])
[*]            htmlsa = etree.HTML(req.text)
[*]            url_f = htmlsa.xpath('//*[@class="totalPage"]')  # 获取到章节最大页码
[*]            # pn_high.append(url_f[0].text)
[*]            pnp = url_f[0].text
[*]
[*]            for pn in range(1, int(pnp) + 1):
[*]
[*]                # 加key不加.webp
[*]                urlz = 'https:{}2F{}%E8%AF%9D{}%2F{}.jpg-zymk.middle'.format(url_tou, ZhangJie + 1 - i, url_key, pn)
[*]                # 加key 加.webp
[*]                urlz1 = 'https:{}2F{}%E8%AF%9D{}%2F{}.jpg-zymk.middle.webp'.format(url_tou, ZhangJie + 1 - i, url_key,pn)
[*]                # 不加key 加.webp
[*]                urlz2 = 'https:{}2F{}%E8%AF%9D{}%2F{}.jpg-zymk.middle.webp'.format(url_tou, ZhangJie + 1 - i, '', pn)
[*]                # 不加key 不加.webp
[*]                url_s = 'https:{}2F{}%E8%AF%9D%2F{}.jpg-zymk.middle'.format(url_tou, ZhangJie, pn)
[*]
[*]                # print(ZhangJie + 1 - i, url_key)
[*]                # print(urlz)
[*]                req_baocun = requests.get(urlz)
[*]
[*]                if req_baocun.status_code == 200:
[*]                    # print(url)
[*]
[*]                    with open('{}\第{}话-{}节.jpg'.format(book_names, ZhangJie + 1 - i, pn), 'wb') as f:
[*]                        f.write(req_baocun.content)
[*]                        # print('第{}话-{}节-保存完成'.format(ZhangJie+1-i, pn))
[*]                        confirmLabel.insert(END, '{}第{}话-第{}节-保存完成'.format(book_names, ZhangJie + 1 - i, pn))
[*]                        confirmLabel.see(END)  # 光标移动到最后显示
[*]                        window.update()  # 刷新文本框显示内容
[*]
[*]                elif requests.get(urlz1).status_code == 200:
[*]
[*]                    req_baocun = requests.get(urlz1)
[*]                    # print(urlz1)
[*]                    with open('{}\第{}话-{}节.jpg'.format(book_names, ZhangJie + 1 - i, pn), 'wb') as f:
[*]                        f.write(req_baocun.content)
[*]                        # print('第{}话-{}节-保存完成'.format(ZhangJie+1-i, pn))
[*]                        confirmLabel.insert(END, '{}第{}话-第{}节-保存完成'.format(book_names, ZhangJie + 1 - i, pn))
[*]                        confirmLabel.see(END)  # 光标移动到最后显示
[*]                        window.update()  # 刷新文本框显示内容
[*]
[*]                elif requests.get(urlz2).status_code == 200:
[*]
[*]                    req_baocun = requests.get(urlz2)
[*]                    # print(urlz2)
[*]                    with open('{}\第{}话-{}节.jpg'.format(book_names, ZhangJie + 1 - i, pn), 'wb') as f:
[*]                        f.write(req_baocun.content)
[*]                        # print('第{}话-{}节-保存完成'.format(ZhangJie+1-i, pn))
[*]                        confirmLabel.insert(END, '{}第{}话-第{}节-保存完成'.format(book_names, ZhangJie + 1 - i, pn))
[*]                        confirmLabel.see(END)  # 光标移动到最后显示
[*]                        window.update()  # 刷新文本框显示内容
[*]
[*]                elif requests.get(url_s).status_code == 200:
[*]
[*]                    # print("失败,重新拼接URL")
[*]                    req_baocun_s = requests.get(url_s).content
[*]                    print(url_s)
[*]                    with open('{}\第{}话-{}节.jpg'.format(book_names, ZhangJie + 1 - i, pn), 'wb') as f:
[*]                        f.write(req_baocun_s)
[*]                    # print('第{}话-{}节-保存完成'.format(ZhangJie+1-i, pn))
[*]                    confirmLabel.insert(END, '{}第{}话-第{}节-保存完成'.format(book_names, ZhangJie + 1 - i, pn))
[*]                    confirmLabel.see(END)  # 光标移动到最后显示
[*]                    window.update()  # 刷新文本框显示内容
[*]    print('已经全部保存完成')
[*]    confirmLabel.insert(END, '已经全部保存完成')
[*]    confirmLabel.see(END)  # 光标移动到最后显示
[*]    window.update()  # 刷新文本框显示内容
[*]
[*]
[*]# 查找书籍的id函数
[*]def book_name(namee):
[*]    n = namee
[*]    url = 'https://www.zymk.cn/api/getsortlist/?callback=getsortlistCb&key={}&topnum=20&client=pc'.format(n)
[*]    req = requests.get(url)  # .content
[*]    res = re.findall('"comic_id":\d+', str(req.text))
[*]    res = re.findall('\d+', str(res))
[*]    res1 = re.findall('"comic_name":"\s*?\S*?"', str(req.text))
[*]    res1 = re.findall(':"\s*\S*"', str(res1))
[*]    res2 = re.sub(r'[\/\\\:\*\?"\<\>\|\[\]\.]', '', str(res1))
[*]    res2 = re.findall(r"'(.+?)'", res2)
[*]
[*]    zidian = dict(zip(res, res2))
[*]    # print('查找到以下内容:', '\n', zidian)
[*]    return zidian
[*]
[*]
[*]# 选择要现在的书籍函数
[*]def namee():
[*]    confirmLabel.delete(0, END)  # 清空文本框
[*]    namee = namee_Entry.get()
[*]    zidian = book_name(namee)  # 调用搜索书名函数
[*]
[*]    if len(zidian) != 0:  # 返回的字典为空,提示重新输入,否则正常执行
[*]        confirmLabel.insert(END, '\t', '                             请双击要下载的漫画:', '\t')
[*]
[*]        for i in zidian.items():
[*]            confirmLabel.insert(END, i)
[*]            # confirmLabel.see(END)  # 光标移动到最后显示
[*]
[*]    else:
[*]        # print('请输入要下载的漫画:')
[*]        confirmLabel.insert(END, '请输入要下载的漫画:' + '\t')
[*]
[*]
[*]def xuanze(event):  # 选择要下载的漫画
[*]    zidian = confirmLabel.get(confirmLabel.curselection())
[*]    # print(zidian)
[*]    if type(zidian) == tuple:  # 判断点击是否为搜索的内容,
[*]        confirmLabel.delete(0, END)  # 清空文本框
[*]        confirmLabel.insert(END, '开始下载:', '\n', zidian[1])
[*]
[*]        # print('开始下载 {}'.format(zidian[1]))
[*]        isExists = os.path.exists('./{}'.format(zidian[1]))
[*]        if not isExists:
[*]            os.mkdir(zidian[1])
[*]
[*]        # print('https://www.zymk.cn/{}/'.format(zidian[0]), zidian[1])
[*]        all_all('https://www.zymk.cn/{}/'.format(zidian[0]), zidian[1])
[*]
[*]
[*]window = Tk()
[*]window.geometry('600x600+500+200')  # 窗口大小
[*]window.title('漫画下载--本程序将搜索知音漫客网站信息')
[*]
[*]taitouLabel = Label(window, text="请输入要下载的漫画:  ", height=4, width=30, font=("Times", 20, "bold"), fg='red')
[*]
[*]namee_Entry = Entry(window, width=25, font=("Times", 20, "bold"))
[*]
[*]button = Button(window, text="搜索", command=namee, )  # .grid_location(33,44)
[*]GunDongTiao = Scrollbar(window)  # 设置滑动块组件
[*]confirmLabel = Listbox(window, height=15, width=55, font=("Times", 15, "bold"), fg='red', bg='#EEE5DE',
[*]                       yscrollcommand=GunDongTiao.set)  # Listbox组件添加Scrollbar组件的set()方法
[*]# window.iconbitmap('timg.ico')#设置窗口图标
[*]confirmLabel.bind('<Double-Button-1>', xuanze)  # 双击选择文本框的内容
[*]
[*]GunDongTiao.config(command=confirmLabel.yview)  # 设置Scrollbar组件的command选项为该组件的yview()方法
[*]
[*]taitouLabel.grid(column=1)
[*]namee_Entry.grid(row=1, column=1, sticky=N + S)
[*]button.grid(row=1, column=1, sticky=E)
[*]
[*]confirmLabel.grid(row=3, column=1, sticky=E)
[*]GunDongTiao.grid(row=3, column=2, sticky=N + S + W)  # 设置垂直滚动条显示的位置
[*]window.mainloop()
[*]
[*]
[*]
[*]
[/list]



网盘链接:
https://www.lanzouj.com/i2igasj

免费评分

参与人数 30吾爱币 +25 热心值 +28 收起 理由
wangtaottl + 1 + 1 我很赞同!
Innocen + 1 谢谢@Thanks!
rekcard + 1 + 1 谢谢@Thanks!
子时落尽 + 1 + 1 谢谢@Thanks!
PPA + 1 + 1 热心回复!
IMRE + 1 + 1 谢谢@Thanks!
zeng16_17 + 1 + 1 我很赞同!
T-Link + 1 我很赞同!
寂灭丶永恒 + 1 + 1 我很赞同!
wxn80 + 1 + 1 谢谢@Thanks!
l5946404 + 1 + 1 谢谢@Thanks!
Yukio + 1 我很赞同!
袅袅系秋风 + 1 + 1 热心回复!
搜游子 + 1 + 1 谢谢@Thanks!
147369 + 1 + 1 我很赞同!
574114295 + 1 + 1 我很赞同!
很奇乖 + 1 + 1 谢谢@Thanks!
云梦墨溪 + 1 我很赞同!
Love丶珍惜 + 2 + 1 下载的是标清的 就是不懂高清这玩意有没有必要...
地狱侠虎 + 1 我很赞同!
奥斯特 + 1 + 1 我很赞同!
admh + 1 谢谢@Thanks!
冰王子 + 1 + 1 好东西,不错,谢谢楼主
Gilbert + 1 + 1 谢谢@Thanks!
pengjiangyu + 1 用心讨论,共获提升!
还是还没克死 + 1 我很赞同!
BriefHistoryof + 1 + 1 厉害呀!谢谢大佬提供案例!
幽悠的叶子 + 1 用心讨论,共获提升!
niebaohua + 1 + 1 我很赞同!
Millet_Lok + 2 + 1 用心讨论,共获提升!

查看全部评分

本帖被以下淘专辑推荐:

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

九袖 发表于 2018-11-15 04:36
期待更加完善~~
 楼主| 考拉熊 发表于 2018-11-11 23:37
z357369 发表于 2018-11-11 23:27
可以扒别的网站的吗???

只可以下 知音漫客的·········
野生kyrie 发表于 2018-11-11 22:49
hezhewangdao 发表于 2018-11-11 23:16
很不错,谢谢分享
z357369 发表于 2018-11-11 23:27
可以扒别的网站的吗???
淮左名都 发表于 2018-11-12 08:59
感谢分享
翻书风 发表于 2018-11-12 18:43
哈哈,真福利
urim 发表于 2018-11-12 21:39
哇这个6唉!!
ZOR 发表于 2018-11-12 21:44
谢谢楼主分享!
Solem 发表于 2018-11-12 22:24
NB,谢谢分享
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-16 21:32

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表