本文来源吾爱破解论坛
本帖最后由 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)
版权声明:
本站所有资源均为站长或网友整理自互联网或站长购买自互联网,站长无法分辨资源版权出自何处,所以不承担任何版权以及其他问题带来的法律责任,如有侵权或者其他问题请联系站长删除!站长QQ754403226 谢谢。