知音漫客爬虫(高清付费都可以)
本帖最后由 729 于 2019-2-13 22:47 编辑第一次发这种贴,不会排版。。。可以下载付费的,图片应该属于高清的。至于变量太乱的问题不要纠结。里面很多都没有优化,可能还会出错
纯属练习,因为知音的包太好抓了.
如有违规,管理帮删下呗.或者通知一下呗,毕竟付费也可以下载的。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 * 256 + str1 - 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)
r=requests.get('https://www.zymk.cn/'+ID)#访问漫画的首页
pt=GetCt(r.text)
Get(name,ID,pt,letter)
kirito_xing 发表于 2019-2-17 22:26
楼主
.webp格式为啥在谷歌浏览器打开也是黑色的,试了一下斗破苍穹这个漫画的
可能是比较老的漫画不行吧,其实不一样的就是图片的url规则不一样而已, 你可以自己去爬一下,很容易抓到包的 我只是学习一下而已{:1_907:}懒得更新了{:1_896:} DukeAss 发表于 2019-2-14 13:02
下载下来都是.webq的文件 而且很小只有几百字节
.webq也是图片格式啊,然后小还不好啊{:1_907:} 忘记多进程了,多进程可能快点。。。 难道是我打开的姿势不对吗?测试了一下,付费不能下载, 谢谢分享,问题已解决 谢谢分享 用心讨论,共获提升! 谢谢分享! 谢谢分享!!! 这些代码怎么用啊。小白发问{:1_924:} 本帖最后由 729 于 2019-2-14 12:02 编辑
looading 发表于 2019-2-14 11:44
这些代码怎么用啊。小白发问
下载python 下载相关的库 复制代码运行就行了
页:
[1]
2