说明:

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按键停止运行

最新文章

  1. Java 动态生成复杂 Word
  2. iOS本地存储-数据库(FMDB)
  3. MyEclipse tomcat7.x 自定义项目部署路径
  4. JavaScript正则表达式小记
  5. HDU 4865 Peter&#39;s Hobby --概率DP
  6. 【转】执行脚本出现bin/bash: bad interpreter: No such file or directory
  7. 如何用一个语句判断一个整数是不是二的整数次幂——从一道简单的面试题浅谈C语言的类型提升(type promotion)
  8. Linux下的定时器
  9. iOS8推送消息的回复处理速度
  10. HDU 5678 ztr loves trees
  11. MVC笔记3:JQuery AutoComplete组件
  12. 扩展Microsoft Graph数据结构(开放扩展)
  13. Adobe Acrobat pro生成PDF模版
  14. Ubuntu16.04安装VS Code
  15. email program (客户端)演变过程有感
  16. SQL Server进阶(三)单表查询
  17. Appium 九宫格 手势解锁
  18. math、numpy、pandas NaN 判断
  19. ipfs docker 运行试用
  20. 前端基础-JavaScript

热门文章

  1. Android -- 再来一发Json
  2. Exdata cell 节点配置时遇到的一个问题
  3. Python网络爬虫 - 1. 准备工作
  4. 静态库与动态库的制作以及程序的动态函数库解析ldd;ldconfig与/etc/ld.so.conf
  5. Google开源单元測试框架Google Test:VS2012 配置
  6. 加密PDF为只读模式
  7. Windows Store GIF player 诞生记
  8. 娓娓道来c指针 (4)解析c的声明语句
  9. Spring 基于xml配置方式的事务
  10. java 动态代理(模式) InvocationHandler(为类中方法执行前或后添加内容)