python学习笔记(11)--爬虫下载漫画图片
2017-03-07 02:04
791 查看
说明:
1. 某本子网站爬虫,现在只实现了扒取一页,已经凌晨两点了,又饿又困,先睡觉,明天再写总结吧!
2. 我是明天,我来写总结了!
3. 这个网站的结构是这样的:
主页:
漫画封面点进去之后:
4. 首先获取主页的html,因为上部和侧边栏都有一些推荐漫画,这些是不需要的,所以处理一下html,只保留主体漫画的html代码。
5. 正则匹配主页html,获取每个封面漫画的名字和地址,名字用来给文件夹取名,地址用来打开每个漫画并获取每个漫画的html。
6. 遍历主页第一页的所有封面漫画,正则匹配每个漫画的html,获取总页数(数组),第一张图片的真实地址(数组),其中真实地址需要提取出两个数字。
7. 开始新建文件夹,跳转到此文件夹(记得把每个文件夹的图片下载完后,跳转到上层文件夹,不然会一直创建子文件夹,导致目录太深,系统报错)
8. 遍历总页数,拼接每个漫画的每张图片的真实地址,下载到当前创建的文件夹里。同时print一下下载进度(正在下载的名字,页数)
9. 遍历完返回上级目录。
注意:
1. 想要增加退出功能,现在运行中只能是通过任务管理器关闭,我是用sublime的REPL运行的,如果是IDLE可能直接关闭就好了。不过我想要按esc退出,空格暂停功能,不知道能不能实现。
2. 现在只是主页的第一页,后面需要增加多页下载,给定一个参数n,下载n页。
3. 整理成函数。
1. 某本子网站爬虫,现在只实现了扒取一页,已经凌晨两点了,又饿又困,先睡觉,明天再写总结吧!
2. 我是明天,我来写总结了!
3. 这个网站的结构是这样的:
主页:
主页-第1页-漫画1封面-漫画1地址 -漫画2封面-漫画2地址 -漫画3封面-漫画3地址 -漫画4封面-漫画4地址 -漫画5封面-漫画5地址 -......... -第2页-漫画1封面-漫画1地址 -漫画2封面-漫画2地址 -漫画3封面-漫画3地址 -漫画4封面-漫画4地址 -漫画5封面-漫画5地址 -......... -第3页-漫画1封面-漫画1地址 -漫画2封面-漫画2地址 -漫画3封面-漫画3地址 -漫画4封面-漫画4地址 -漫画5封面-漫画5地址 -......... ...............
漫画封面点进去之后:
漫画1-第1页-图片地址1 -第2页-图片地址2 -第3页-图片地址3 -第4页-图片地址4 -..... -第n页-图片地址n
4. 首先获取主页的html,因为上部和侧边栏都有一些推荐漫画,这些是不需要的,所以处理一下html,只保留主体漫画的html代码。
5. 正则匹配主页html,获取每个封面漫画的名字和地址,名字用来给文件夹取名,地址用来打开每个漫画并获取每个漫画的html。
6. 遍历主页第一页的所有封面漫画,正则匹配每个漫画的html,获取总页数(数组),第一张图片的真实地址(数组),其中真实地址需要提取出两个数字。
7. 开始新建文件夹,跳转到此文件夹(记得把每个文件夹的图片下载完后,跳转到上层文件夹,不然会一直创建子文件夹,导致目录太深,系统报错)
8. 遍历总页数,拼接每个漫画的每张图片的真实地址,下载到当前创建的文件夹里。同时print一下下载进度(正在下载的名字,页数)
9. 遍历完返回上级目录。
注意:
1. 想要增加退出功能,现在运行中只能是通过任务管理器关闭,我是用sublime的REPL运行的,如果是IDLE可能直接关闭就好了。不过我想要按esc退出,空格暂停功能,不知道能不能实现。
2. 现在只是主页的第一页,后面需要增加多页下载,给定一个参数n,下载n页。
3. 整理成函数。
1 import urllib.request 2 import re 3 import os 4 5 # 获取漫画网首页html 6 url = "http://www.yaoqmh.net/shaonvmanhua/list_4_1.html" 7 headers = {'User-Agent':'Mozilla/5.0 (Windows NT 6.1; WOW64; rv:23.0) Gecko/20100101 Firefox/23.0'} 8 req = urllib.request.Request(url=url,headers=headers) 9 response = urllib.request.urlopen(url) 10 html = response.read().decode("utf-8") 11 # 处理一下html,只保留中间的本子,侧边和顶部的本子不要 12 startNum = html.find("mainleft") 13 endNum = html.find("mainright") 14 html = html[startNum:endNum] 15 16 17 # 从html获取本子编号,名字 18 # <a href="/shaonvmanhua/8389.html" class="pic show" title="里番H少女漫画之發情關係" target="_blank"><span class="bt">里番H少女漫画之發情關係</span> <span class="bg"></span><img class="scrollLoading" src="http://pic.taov5.com/1/615/183-1.jpg" xsrc="http://pic.taov5.com/1/615/183-1.jpg" alt="里番H少女漫画之發情關係" style="background:url(/static/images/loading.gif) no-repeat center;" width="150" height="185"></a> 19 # 20 # <img class="scrollLoading" src="http://pic.taov5.com/1/615/183-1.jpg" xsrc="http://pic.taov5.com/1/615/183-1.jpg" alt="里番H少女漫画之發情關係" style="background:url(/static/images/loading.gif) no-repeat center;" width="150" height="185"> 21 regBookNum = r'href="/shaonvmanhua/(\d+)\.html"' 22 regName = r'title="(.+?)"' 23 bookNums = re.findall(regBookNum, html) 24 bookNames = re.findall(regName, html) 25 # print(bookNums) 26 # print(bookNames) 27 28 # 打开每个本子网页,获取总页数,第一张图片的网址 29 # <img alt="里番H少女漫画之發情關係" src="http://pic.taov5.com/1/615/143.jpg"> 30 for i in range(len(bookNums)): 31 urlBook = "http://www.yaoqmh.net/shaonvmanhua/"+bookNums[i]+".html" 32 reqBook = urllib.request.Request(url=urlBook,headers=headers) 33 responseBook = urllib.request.urlopen(reqBook) 34 htmlBook = responseBook.read().decode("utf-8") 35 regPageNums = r"共(\d+)页:" 36 regImgStart1 = r"http://pic\.taov5\.com/1/(\d+)/\d+?\.jpg" 37 regImgStart2 = r"http://pic\.taov5\.com/1/\d+?/(\d+?)\.jpg" 38 pageNums = re.findall(regPageNums,htmlBook)#总页数,获得一个二维数组,有两个总页数标签 39 imgStart1 = re.findall(regImgStart1, htmlBook)#图片目录的第一个数字,findall返回一个数组 40 imgStart2 = re.findall(regImgStart2, htmlBook)#图片目录的第二个数字 41 # 每个本子新建文件夹,下载完一个本子要返回上一级目录!!不然会一直新建子文件夹! 42 os.mkdir(bookNames[i])#新建文件夹 43 os.chdir(bookNames[i])#跳转到指定目录 44 #记得后面要返回上级目录!! 45 46 # 开始页码和结束页码 47 rangeMin = int(imgStart2[0]) 48 rangeMax = int(imgStart2[0]) + int(pageNums[0]) 49 pageNums = int(pageNums[0]) 50 # print(rangeMin) 51 # print(rangeMax) 52 # print(type(rangeMin)) 53 # 打开每页,下载保存到这个名字的文件夹里 54 print("正在下载:"+bookNames[i])#给个下载提示本子名 55 for j in range(pageNums): 56 urlImg = "http://pic.taov5.com/1/"+imgStart1[0]+"/"+str(rangeMin+j)+".jpg" 57 reqImg = urllib.request.Request(url=urlImg,headers=headers) 58 responseImg = urllib.request.urlopen(reqImg) 59 img = open(str(j)+".jpg","wb") 60 img.write(responseImg.read()) 61 img.close() 62 print("已下载%d页,共%d页"%(j+1,pageNums))#提示下载几页了,放在后面比较好 63 # os.system("pause") 64 os.chdir(os.path.dirname(os.getcwd()))#返回上级目录 65 # 退出功能,下载哪一页,python按键停止运行
相关文章推荐
- python学习笔记(14)--爬虫下载漫画图片修改版
- python学习笔记(10)--爬虫下载煎蛋图片
- python学习笔记(12)--爬虫下载煎蛋网图片
- python爬虫:下载百度贴吧图片(多页)学习笔记
- Python学习笔记:爬虫下载图片
- python爬虫:下载百度贴吧图片学习笔记
- python学习笔记(8)--爬虫下载占位图片
- Python爬虫学习笔记(1):简单的图片爬取
- python爬虫学习--下载图片
- python学习:urllib库学习:制作简易爬虫下载图片
- python 爬虫学习<将某一页的所有图片下载下来>
- python爬虫框架scrapy学习图片下载
- Python爬虫学习笔记——自动爬取XX网站,下载种子,封面,番号
- Python爬虫学习记录(1)——百度贴吧图片下载
- Python 爬虫学习 网页图片下载
- python学习笔记(一)爬虫实战:图片自动下载器
- Python爬虫学习笔记一:简单网页图片抓取
- python爬虫学习多进程下载图片
- Python爬虫学习笔记二:百度贴吧网页图片抓取
- python自学笔记(8)--Python简单爬虫从网站上下载图片和用第三方库request实现百度翻译