Python爬取斗破苍穹漫画,方法与原作者不同。
本帖最后由 考拉熊 于 2018-10-26 18:24 编辑今天早上看见帖子https://fishc.com.cn/thread-123457-1-1.html,用Python爬取斗破苍穹漫画。刚好我自己也练练手,
1 观看代码得知漫画网站,
2 分析网页发现,图片的URL很有规则
3 https://mhpic.jumanhua.com/comic/D%2F%E6%96%97%E7%A0%B4%E8%8B%8D%E7%A9%B9%E6%8B%86%E5%88%86%E7%89%88%2F689%E8%AF%9DV%2F1.jpg-mht.middle
【上面链接后面的2F689代表698话】【上面链接后面的2F1代表每一话的第几章图片】
4 接下来就简单了,用for循环可以获取到图片并保存,
但是有个问题,我们不知道每一话的标题
比如第689话 战幻身(中)
好在所有的章节信息都在http://www.manhuatai.com/doupocangqiong/这个链接里面,用正则把他们都提取出来。
先看下图片
源代码在下面
我已经全部下载保存百度云盘了,需要的下载:
https://pan.baidu.com/s/1hTMQHSqYObcn5HgvtNYVnA
提取码回复
**** Hidden Message *****
**** Hidden Message ***** 没人看吗{:10_266:}{:10_266:}{:10_266:}{:10_266:}{:10_266:} 考拉熊 发表于 2018-10-26 16:24
没人看吗
我也是这样想的 但是遇到问题。链接的规则并不是这样 暗夜之隐 发表于 2018-10-26 16:27
我也是这样想的 但是遇到问题。链接的规则并不是这样
什么规则?,,不知道你遇到的什么问题,可以贴图上来,
暗夜之隐 发表于 2018-10-26 16:27
我也是这样想的 但是遇到问题。链接的规则并不是这样
我现在估计有10分钟就爬完了 考拉熊 发表于 2018-10-26 16:24
没人看吗
我遇到的第一个不能访问链接是这个 https://mhpic.jumanhua.com/comic/D%2F%E6%96%97%E7%A0%B4%E8%8B%8D%E7%A9%B9%E6%8B%86%E5%88%86%E7%89%88%2F696%E8%AF%9DV%2F1.jpg-mht.middle.webp
注意V%2F1.jpg 这个字母V 是没有的提取不到 这个是696话 你也可以看一下 考拉熊 发表于 2018-10-26 16:30
我现在估计有10分钟就爬完了
你是从第一章开始的。 我是从最新的访问的 难道696章节是特别情况 暗夜之隐 发表于 2018-10-26 16:32
你是从第一章开始的。 我是从最新的访问的 难道696章节是特别情况
我是从最后一张开始的,,,696确实出现问题了, 考拉熊 发表于 2018-10-26 16:37
我是从最后一张开始的,,,696确实出现问题了,
我也觉得很奇怪,不过原作者是从JS找到的URL加密方法 暗夜之隐 发表于 2018-10-26 16:40
我也觉得很奇怪,不过原作者是从JS找到的URL加密方法
那个我有js的加密算法等一些,我看了一下,有点不太懂 顶一下 考拉熊 发表于 2018-10-26 18:25
顶一下
我下载完啦。用了最笨的方法。 对其它链接没有通用性 也就是只能下载这本漫画 如果要下载其它的需要改
import urllib.request
from bs4 import BeautifulSoup as bs
import re
import os
from urllib import parse
from urllib.request import quote
import io
from PIL import Image
def urlopen(url):
req = urllib.request.Request(url)
req.add_header("User-Agent","Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36")
html = urllib.request.urlopen(req)
html = html.read()
return html
#urlopen 打开链接 并加了heaaders
def url_list(url):
html = urlopen(url)
htm = html.decode('utf-8')
htm = bs(htm,'lxml')
cont = htm.div(class_="mhlistbody")
cont = cont
cont = cont.find_all('a')
urllist = []
for i in cont:
i = i.attrs
i = i['href']
i = 'http://www.manhuatai.com'+i
urllist.append(i)
return urllist
def content(url):
os.mkdir('苍穹')
os.chdir('苍穹')
urllist = url_list(url)
print('一共有:'+str(len(urllist))+'个链接')
for i in urllist:
html = urlopen(i)
html = html.decode('utf-8')
#这里是找到章节数
nmu = re.findall(r'(pagename:"第)(\d*)(话)',html)
if len(nmu) == 0:
continue
#这个是章节名字
htm = bs(html,'lxml')
h1 = htm.h1.string
os.mkdir(h1)
os.chdir(h1)
#这个是获取图片链接的大写字母它是小说名字第一个字的拼音字母的大家
capital = re.search(r'mhid:".',html)
capital = capital.group()
capital = capital[-1]
capital = capital.capitalize()
#这里是链接中间的文字
name = re.search(r'(mhname:")(.*?)(")',html)
name = name.group(2)
name = name+'拆分版'
nmu = nmu
nmu = nmu
nmu = nmu+'话'
#这里是找到这个章节一共有几张图片
page = re.search(r'(totalimg:)(\d*)(,)',html)
page = int(page.group(2))
cont_list = []
list3 =
list2 =
ce = nmu[:-1]
ce = int(ce)
jie = ce in list2
jie1 = ce in list3
if jie == True:
nmu = str(ce)+'话v'
if jie1 == True:
nmu = str(ce)+'话v1'
for i in range(1,page+1):
url = capital+'/'+name+'/'+nmu+'/'+str(i)+'.jpg-mht.middle.webp'
url = 'https://mhpic.jumanhua.com/comic/'+parse.quote(url)
cont_list.append(url)
for i in cont_list:
fi_name = h1+str(cont_list.index(i)+1)+'.jpg'
print(fi_name)
cont = urlopen(i)
img = Image.open(io.BytesIO(cont))
img.save(fi_name,'JPEG')
os.chdir(os.pardir)
url = "http://www.manhuatai.com/doupocangqiong/"
list1 = content(url)
暗夜之隐 发表于 2018-10-26 20:35
我下载完啦。用了最笨的方法。 对其它链接没有通用性 也就是只能下载这本漫画 如果要下载其它的需要改
...
厉害,佩服{:5_106:},,说实在的,,我单个文件代码还没有写超过一百行呢,,惭愧{:5_109:}
我有时间补一下这个代码,,网站在url中随机加了参数,就是不想让我们容易爬取吧{:5_109:}{:5_109:} 考拉熊 发表于 2018-10-28 22:14
厉害,佩服,,说实在的,,我单个文件代码还没有写超过一百行呢,,惭愧
我有时间补 ...
嗯 反爬虫我这个方法太笨了 还是原创那位 直接从js里面找到破解方法。 回复 吱吱 过来顶一下 过来顶一下 过来顶一下 过来顶一下