python学习笔记(11)--爬虫下载漫画图片
说明:
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. 整理成函数。
import urllib.request
import re
import os # 获取漫画网首页html
url = "http://www.yaoqmh.net/shaonvmanhua/list_4_1.html"
headers = {'User-Agent':'Mozilla/5.0 (Windows NT 6.1; WOW64; rv:23.0) Gecko/20100101 Firefox/23.0'}
req = urllib.request.Request(url=url,headers=headers)
response = urllib.request.urlopen(url)
html = response.read().decode("utf-8")
# 处理一下html,只保留中间的本子,侧边和顶部的本子不要
startNum = html.find("mainleft")
endNum = html.find("mainright")
html = html[startNum:endNum] # 从html获取本子编号,名字
# <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>
#
# <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">
regBookNum = r'href="/shaonvmanhua/(\d+)\.html"'
regName = r'title="(.+?)"'
bookNums = re.findall(regBookNum, html)
bookNames = re.findall(regName, html)
# print(bookNums)
# print(bookNames) # 打开每个本子网页,获取总页数,第一张图片的网址
# <img alt="里番H少女漫画之發情關係" src="http://pic.taov5.com/1/615/143.jpg">
for i in range(len(bookNums)):
urlBook = "http://www.yaoqmh.net/shaonvmanhua/"+bookNums[i]+".html"
reqBook = urllib.request.Request(url=urlBook,headers=headers)
responseBook = urllib.request.urlopen(reqBook)
htmlBook = responseBook.read().decode("utf-8")
regPageNums = r"共(\d+)页:"
regImgStart1 = r"http://pic\.taov5\.com/1/(\d+)/\d+?\.jpg"
regImgStart2 = r"http://pic\.taov5\.com/1/\d+?/(\d+?)\.jpg"
pageNums = re.findall(regPageNums,htmlBook)#总页数,获得一个二维数组,有两个总页数标签
imgStart1 = re.findall(regImgStart1, htmlBook)#图片目录的第一个数字,findall返回一个数组
imgStart2 = re.findall(regImgStart2, htmlBook)#图片目录的第二个数字
# 每个本子新建文件夹,下载完一个本子要返回上一级目录!!不然会一直新建子文件夹!
os.mkdir(bookNames[i])#新建文件夹
os.chdir(bookNames[i])#跳转到指定目录
#记得后面要返回上级目录!! # 开始页码和结束页码
rangeMin = int(imgStart2[0])
rangeMax = int(imgStart2[0]) + int(pageNums[0])
pageNums = int(pageNums[0])
# print(rangeMin)
# print(rangeMax)
# print(type(rangeMin))
# 打开每页,下载保存到这个名字的文件夹里
print("正在下载:"+bookNames[i])#给个下载提示本子名
for j in range(pageNums):
urlImg = "http://pic.taov5.com/1/"+imgStart1[0]+"/"+str(rangeMin+j)+".jpg"
reqImg = urllib.request.Request(url=urlImg,headers=headers)
responseImg = urllib.request.urlopen(reqImg)
img = open(str(j)+".jpg","wb")
img.write(responseImg.read())
img.close()
print("已下载%d页,共%d页"%(j+1,pageNums))#提示下载几页了,放在后面比较好
# os.system("pause")
os.chdir(os.path.dirname(os.getcwd()))#返回上级目录
# 退出功能,下载哪一页,python按键停止运行
python学习笔记(11)--爬虫下载漫画图片的更多相关文章
- python学习笔记(14)--爬虫下载漫画图片修改版
说明: 1. 2017.3.12,周六从中午吃完包子12点多折腾了一下午加一个晚上,试了4个网站的爬虫,发现都不能下载!甚至前几天测试能下载的都不能用了! 2. 到晚上发现煎蛋网的可以用了,立即试了下 ...
- python学习笔记11 ----线程、进程、协程
进程.线程.协程的概念 进程和线程是操作系统中两个很重要的概念,对于一般的程序,可能有若干个进程,每一个进程有若干个同时执行的线程.进程是资源管理的最小单位,线程是程序执行的最小单位(线程可共享同一进 ...
- 吴裕雄--python学习笔记:爬虫基础
一.什么是爬虫 爬虫:一段自动抓取互联网信息的程序,从互联网上抓取对于我们有价值的信息. 二.Python爬虫架构 Python 爬虫架构主要由五个部分组成,分别是调度器.URL管理器.网页下载器.网 ...
- 吴裕雄--python学习笔记:爬虫
import chardet import urllib.request page = urllib.request.urlopen('http://photo.sina.com.cn/') #打开网 ...
- python学习笔记11 ----网络编程
网络编程 网络编程需要知道的概念 网络体系结构就是使用这些用不同媒介连接起来的不同设备和网络系统在不同的应用环境下实现互操作性,并满足各种业务需求的一种粘合剂.网络体系结构解决互质性问题彩是分层方法. ...
- Python学习笔记22:Django下载并安装
Django它是一个开源Web应用程序框架.由Python书面. 通过MVC软件设计模式,这种模式M,视图V和控制器C. 它最初是一个数字新闻内容为主的网站已经发展到管理劳伦斯出版集团.那是,CMS( ...
- Python 学习笔记11
如何要飞得高,就该把天空忘掉.如果时时想着梦想,那就寸步难行.因为会产生很强的挫败感.倾空自己的杯子,把自己放空,才能放得进去东西. 这两天一直在鼓捣要用python写一个博客出来.先是下载了一个放到 ...
- python学习笔记:"爬虫+有道词典"实现一个简单的英译汉程序
1.有道的翻译 网页:www.youdao.com Fig1 Fig2 Fig3 Fig4 再次点击"自动翻译"->选中'Network'->选中'第一项',如下: F ...
- Python学习笔记之爬虫
爬虫调度端:启动爬虫,停止爬虫,监视爬虫运行情况 URL管理器:对将要爬取的和已经爬取过的URL进行管理:可取出带爬取的URL,将其传送给“网页下载器”网页下载器:将URL指定的网页下载,存储成一个字 ...
随机推荐
- J2EE 中 用 El表达式 和 Jsp 方式 取得 URL 中的参数方法
使用 el表达式方法: var urlParamValue = "${param.urlVarName}"; 使用 Jsp 表达式 var urlParamValue2 = &qu ...
- (剑指Offer)面试题43:n个骰子的点数
题目: 把n个骰子仍在地上,所有骰子朝上一面的点数之和为s.输入n,打印出s的所有可能的值出现的概率. 思路: s可能出现的值的范围为:n--6*n 1.全排列 回溯法枚举n个骰子(6面)的全排列,然 ...
- es5 - array - unshift
/** * 描述:该unshift()方法从数组中添加单个或多个元素,并且返回长度 * 语法:arr.unshift(element1 [,... [,elementN ]]) * 参数:要添加到数组 ...
- GDB高级使用方法
1.设置环境变量 用户可以在GDB的调试环境中定义自己需要的变量,用来保存一些调试程序中的运行数据.要定义一个GDB的变量很简单,只需使用GDB的set命令. GDB的环境变量和Linux一样,也是以 ...
- 反射方式,获取出集合ArrayList类的class文件对象
/* * 定义集合类,泛型String * 要求向集合中添加Integer类型 * * 反射方式,获取出集合ArrayList类的class文件对象 * 通过class文件对象,调用add方法 * * ...
- 【转】DNS查询过程
DNS查询过程 DNS的查询过程是指在客户端通过DNS服务器将一个IP地址转换为一个FQDN(Fully Qualified Domain Name,完全合格的域名),或将一个FQDN转化为一个IP地 ...
- Google开源单元測试框架Google Test:VS2012 配置
由题目可知,Google Test(简称gtest)是Google公布的一个开源C/C++測试框架,被应用于多个开源项目及Google内部项目中,包括Chrome浏览器.LLVM编译器架构.Proto ...
- ubuntu执行级别,设置单用户模式
redhat的runlevel级别定义例如以下: 0:关机.不能将系统缺省执行级别设置为0,否则无法启动. 1:单用户模式.仅仅同意root用户对系统进行维护. 2:多用户模式.但不能使用NFS( ...
- PotPlayer 禁止更新
PotPlayer设置禁止更新 CreateTime--2016年10月15日22:37:49 迁移时间:2017年8月9日15:36:48 Author:Marydon UpdateTime-- ...
- Tomcat 关闭时报错
最近tomcat走普通的关闭方式无法正常关闭,会报一些Error,用的是Tomcat7,据说是Tomcat7在关闭的时候加了一些检查线程泄漏内存泄露的东西 总结起来,在我项目中有这么几个原因会导致关闭 ...