吾爱破解 - LCG - LSG |安卓破解|病毒分析|www.52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 6503|回复: 17
收起左侧

[Python 转载] 知音漫客爬虫(高清付费都可以)

[复制链接]
729 发表于 2019-2-13 22:00
本帖最后由 729 于 2019-2-13 22:47 编辑

第一次发这种贴,不会排版。。。可以下载付费的,图片应该属于高清的。至于变量太乱的问题不要纠结。里面很多都没有优化,可能还会出错
纯属练习,因为知音的包太好抓了.
如有违规,管理帮删下呗.或者通知一下呗,毕竟付费也可以下载的。
[Python] 纯文本查看 复制代码
import requests
import os
import json
from bs4 import BeautifulSoup
def GetAll():#获取知音漫客的所有漫画书名以及ID
    hearad={#添加请求头,要不请求不会成功
    'Host': 'www.zymk.cn'
            }
    All=requests.get('http://www.zymk.cn/nodeapi/comic/allComic/',headers=hearad)#返回一个json的数据
    data=json.loads(All.text)#进行数据格式化
    data=data['data']#取出有所有漫画的数据
    return data#返回漫画数据
def GetId(Word,m):#关键词搜索,返回漫画名字与ID
    for o in m:#遍历所有漫画数据,含有关键词时输出
        if Word in o['comic_name']:
            print(o['comic_name']+'ID:'+str(o['comic_id']))
def GetCt(demo):#获取所有章节名称与地址,为下面爬取图片的准备地址.
    pt=[]
    soup=BeautifulSoup(demo,'html.parser')
    ct=soup.find(id='chapterList')
    List=ct.find_all(class_='item')
    for l in List :
        a=l.find('a')
        href=a.get('href')
        name=a.string
        pt.append(dict(name=name,href=href))
    return pt#返回一个列表,列表里面每一个元素都是一个字典,每个字典都是一个章节的名字和地址
def Get(name,ID,pt,letter):
    os.mkdir('D:\\'+name)#创建一个目录,为保存漫画做准备
    print('开始进行下载...')
    for p in pt :#进行循环,保存每一个章节.
        #GetM(name,ID,p['href'],p['name'].strip(),letter)
        url=requests.get('https://www.zymk.cn/'+ID+'/'+p['href'])#构建每个章节的url
        soup=BeautifulSoup(url.text,'html.parser')#使用BeautifulSoup分析html页面
        page=soup.find(class_='totalPage').string#查找每章节的最大页数
        #图片的url构建:https://mhpic.zymkcdn.com/comic/漫画名第一个字的首字母/漫画名/章节名+GQ/页数.jpg-zymk.middle.webp
        #有些漫画不一样,比如,斗破苍穹之大主宰....就不一样了,这里只是通用的.
        #然后付费通知啊,url 又是不同的.所以保存的图片也是假的
        html='https://mhpic.zymkcdn.com/comic/'+str(letter)+'/'+name+'/'+p['name'].strip()+'GQ'+'/'#构建爬取图片的地址通用部分
        if requests.get(html+'1.jpg-zymk.middle.webp').status_code==404:#url组合规则有几种,现在试错.这只是其中一个
            html='https://mhpic.zymkcdn.com/comic/'+str(letter)+'/'+name+'/'+p['name'].strip()+'/'
        for i in range(1,int(page)+1):#循环爬取每章节的所有图片,并保存
            imge=requests.get(html+str(i)+'.jpg-zymk.middle.webp')#爬取图片
            with open ('D:\\'+name+'\\'+str(p['name'].strip())+str(i)+'.webp','wb',) as f :
                f.write(imge.content)
        print('保存'+p['name'].strip()+'完成')
    print('全部保存完毕,请注意查看D盘')
#以下代码是从百度找到的,主要用来判断中文的首字母.
def single_get_first(unicode1):
    str1 = unicode1.encode('gbk')
    try:
        ord(str1)
        return str1
    except:
        asc = str1[0] * 256 + str1[1] - 65536
        if asc >= -20319 and asc <= -20284:
            return 'a'
        if asc >= -20283 and asc <= -19776:
            return 'b'
        if asc >= -19775 and asc <= -19219:
            return 'c'
        if asc >= -19218 and asc <= -18711:
            return 'd'
        if asc >= -18710 and asc <= -18527:
            return 'e'
        if asc >= -18526 and asc <= -18240:
            return 'f'
        if asc >= -18239 and asc <= -17923:
            return 'g'
        if asc >= -17922 and asc <= -17418:
            return 'h'
        if asc >= -17417 and asc <= -16475:
            return 'j'
        if asc >= -16474 and asc <= -16213:
            return 'k'
        if asc >= -16212 and asc <= -15641:
            return 'l'
        if asc >= -15640 and asc <= -15166:
            return 'm'
        if asc >= -15165 and asc <= -14923:
            return 'n'
        if asc >= -14922 and asc <= -14915:
            return 'o'
        if asc >= -14914 and asc <= -14631:
            return 'p'
        if asc >= -14630 and asc <= -14150:
            return 'q'
        if asc >= -14149 and asc <= -14091:
            return 'r'
        if asc >= -14090 and asc <= -13119:
            return 's'
        if asc >= -13118 and asc <= -12839:
            return 't'
        if asc >= -12838 and asc <= -12557:
            return 'w'
        if asc >= -12556 and asc <= -11848:
            return 'x'
        if asc >= -11847 and asc <= -11056:
            return 'y'
        if asc >= -11055 and asc <= -10247:
            return 'z'
        return ''
def getPinyin(string):
    if string==None:
        return None
    lst = list(string)
    charLst = []
    for l in lst:
        charLst.append(single_get_first(l))
    return  ''.join(charLst)
def is_Chinese(word):
    for ch in word:
        if '\u4e00' <= ch <= '\u9fff':
            return getPinyin(word)
        else:
            return word

m=GetAll()#获取所有漫画数据
key=input('输入漫画关键词')#
GetId(key,m)
ID=input('输入漫画ID')
name=input('输入漫画精确名字')
letter=is_Chinese(name[0])
r=requests.get('https://www.zymk.cn/'+ID)#访问漫画的首页
pt=GetCt(r.text)
Get(name,ID,pt,letter)

免费评分

参与人数 2吾爱币 +1 热心值 +2 收起 理由
t17773839515 + 1 热心回复!
ZHXZHX + 1 + 1 谢谢@Thanks!

查看全部评分

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

 楼主| 729 发表于 2019-2-18 14:08
kirito_xing 发表于 2019-2-17 22:26
楼主
.webp格式为啥在谷歌浏览器打开也是黑色的,试了一下斗破苍穹这个漫画的

可能是比较老的漫画不行吧  ,其实不一样的就是图片的url规则不一样而已, 你可以自己去爬一下,很容易抓到包的 我只是学习一下而已  懒得更新了
 楼主| 729 发表于 2019-2-14 14:16
DukeAss 发表于 2019-2-14 13:02
下载下来都是.webq的文件 而且很小只有几百字节

.webq也是图片格式啊,然后小还不好啊
 楼主| 729 发表于 2019-2-13 22:51
ZHXZHX 发表于 2019-2-14 00:41
难道是我打开的姿势不对吗?测试了一下,付费不能下载,
ZHXZHX 发表于 2019-2-14 00:55
谢谢分享,问题已解决
liberrun 发表于 2019-2-14 04:42 来自手机
谢谢分享
多幸运遇见baby 发表于 2019-2-14 08:27
用心讨论,共获提升!
5register 发表于 2019-2-14 09:23
谢谢分享!
lzj1314 发表于 2019-2-14 09:29
谢谢分享!!!
looading 发表于 2019-2-14 11:44
这些代码怎么用啊。小白发问
 楼主| 729 发表于 2019-2-14 11:49
本帖最后由 729 于 2019-2-14 12:02 编辑
looading 发表于 2019-2-14 11:44
这些代码怎么用啊。小白发问

下载python 下载相关的库 复制代码运行就行了
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则 警告:本版块禁止灌水或回复与主题无关内容,违者重罚!

快速回复 收藏帖子 返回列表 搜索

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

GMT+8, 2024-5-17 08:41

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

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