利用python爬取漫画神精榜

爱必应

小白贴,仅用于新手讨论相互学习,大虾请绕道
继上次爬完小说之后,昨天想爬取一部不错的漫画,先附上要爬取的网址:https://www.zymk.cn/66/
随便点进去一个章节,然后审查元素,寻找规律,我点开的是第一章,需要留意的有第一章的网址,图片的真实地址,具体看图

利用python爬取漫画神精榜-图1

然后我们复制图片的真实网址到浏览器试着打开看看具体的效果,发现可以打开,然后还发现有具体的规律,因为网址上面有章节名和页数,虽然经过了urlencode的编码

利用python爬取漫画神精榜-图2

到这之后我们需要获取的信息就剩下了章节图片的最大页数,至于怎样去获取最大页数了,我这里选择了打开每一章的第一页来获取,因为里面包含了页数信息。

利用python爬取漫画神精榜-图3

那么还有最后一个问题就是怎样去打开每一章漫画了,然后我们可以从漫画列表来下手,发现有一个list,所以我们可以利用那个list来获取每一章的具体网址

利用python爬取漫画神精榜-图4

具体代码如下,有部分待优化异常处理,因为一出错会导致程序崩溃
通过这个方法竟然可以下载付费漫画,该网页估计还有待优化,仅用于学习交流,大家不要用于其他用途

#两个库函数安装,已有可忽略#pip install requests#pip install beautifulsoup4import requestsimport re #正则匹配from bs4 import BeautifulSoup #解析网页内容import urllib.parse #将内容转换为urlencode格式headers = {    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.87 Safari/537.36'    }#下载网页用于分析内容def down_one_page(url):    respond = requests.get(url,headers=headers)    if(respond.status_code == 200):        return respond.content.decode()    return 'err'#将实际内容下载为文件保存到本地def download(name,url):    file = requests.get(url,headers=headers)    with open(name,'wb') as f:        f.write(file.content)begin_url = 'https://www.zymk.cn/66/'html = down_one_page(begin_url)soup = BeautifulSoup(html,'lxml')results = soup.find_all(attrs = {'class':'chapter-list clearfix'})datas = re.findall('href="(.*?)"',str(results),re.S) #获取章节列表datas.reverse() #列表倒序print('漫画神精榜下载')print('请输入需要下载的章节1-' + str(len(datas)))begin = int(input('开始章节:'))end = int(input('结束章节:'))#审查元素获得的图片地址https://mhpic.xiaomingtaiji.net/comic/S%2F%E7%A5%9E%E7%B2%BE%E6%A6%9C%2F1%E8%AF%9DGQ%2F1.jpg-zymk.middle.webp#url..为自己发现的规律所拆分的分段网址,S%2F%E7%A5%9E%E7%B2%BE%E6%A6%9C%2F1%E8%AF%9DGQ%2F1 为中文urlencode编码和页码url1 = 'https://mhpic.xiaomingtaiji.net/comic/S%2F%E7%A5%9E%E7%B2%BE%E6%A6%9C%2F'url3 = 'GQ%2F'#url4 = '.jpg-zymk.middle.webp'  #网页原图片为webp格式,保存下来不方便查看,查了资料说可以直接保存为.jpgurl4 = '.jpg-zymk.middle.jpg'#循环下载章节for i in range(begin-1,end):    url = begin_url + str(datas[i])    html = down_one_page(url)    max_page = re.findall('end_var:(.*?),comic_',html,re.S)    name = re.findall('chapter_name:"(.*?)"',html,re.S)    name = name[0]    url2 = urllib.parse.quote(name)#循环下载章节下的分页    for num in range(1,int(max_page[0])+1):        url = url1+url2+url3+str(num)+url4        download(name+' '+str(num)+'.jpg',url)#输出进度    print('已完成 第'+ name)i = Nonewhile(i == None):    i = input('按Enter键退出')

百度网盘,里面包含源代码和exe封装程序
链接:https://pan.baidu.com/s/18BvpPR4ObN_Ecue7MhYc_g
提取码:dpan

声明:本站所有资源均由网友分享,如有侵权内容,请在文章下方留言,本站会立即处理。

原文链接:,转发请注明来源!

发表评论