说明:

1. 2017.3.12,周六从中午吃完包子12点多折腾了一下午加一个晚上,试了4个网站的爬虫,发现都不能下载!甚至前几天测试能下载的都不能用了!

2. 到晚上发现煎蛋网的可以用了,立即试了下漫画网,尼玛居然也能用了!不过下载了几个之后又不能用了!真是法克了!

3. 过了一会,又是一会儿能用一会儿不能用。又过了一会儿,完全不能用了。真是草你麻痹了!能不能有个准了?

4. 从网上找的代理ip,各种不靠谱,反正只要代码里用了代理,就不能用,访问被拒绝。不过还是放上一个代理地址,万一以后用到http://www.ip181.com/

5. 后来,抱着试一试的心态,用手机开了个热点,尼玛漫画又能用了!而且重新连上无线也能用了!不过下载了几个之后又不能用了!真是无力吐槽。。

6. 对爬虫彻底失望,看到一篇文章说爬虫的最高境界是只要浏览器能看到的,就能爬下来!心累了,再说吧。。

7. 中间有个第8页本来网站就打不开这张图片,结果爬的时候404报错,这地方用了一下try catch,还挺好用,另外加个continue,可以直接下一次循环,所以页码也可以直接写pagenum+1了。

8. (2017.3.14)更改一个地方,第18行urlopen的参数改为req,原来是myurl,就相当于user-agent没用上。

 import urllib.request
 import re
 import os
 import time
 import random
 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'}
 headers = {'User-Agent':'Mozilla/5.0 (Windows NT 10.0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.22 Safari/537.36 SE 2.X MetaSr 1.0'}

 # iplist = ['111.197.141.57:9797','116.228.236.219:8080','120.26.51.101:8118','113.222.80.216:3128','117.90.1.88:9000']
 # proxy_support = urllib.request.ProxyHandler({'http':random.choice(iplist)})
 # opener = urllib.request.build_opener(proxy_support)
 # urllib.request.install_opener(opener)

 # 封装获取html的三行代码
 def getHtml(myurl):
     req = urllib.request.Request(url=myurl,headers=headers)
     response = urllib.request.urlopen(req)
     html = response.read().decode("utf-8")
     return html
 # 获取漫画网首页html
 def getMainHtml():
     html = getHtml(url)
     # 处理一下html,只保留中间的本子,侧边和顶部的本子不要
     startNum = html.find("mainleft")
     endNum = html.find("mainright")
     html = html[startNum:endNum]
     return html
 # 从主页html获取本子编号,名字
 def getNumsAndNames():
     html = getMainHtml()
     # <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"'
     bookNums = re.findall(regBookNum, html)
     regName = r'title="(.+?)"'
     bookNames = re.findall(regName, html)
     return bookNums,bookNames

 # 打开每页,下载保存到这个名字的文件夹里
 def downloadPic(i):
     bookNums = getNumsAndNames()[0]#获取本子编号
     bookNames = getNumsAndNames()[1]#获取本子名称

     urlBook = "http://www.yaoqmh.net/shaonvmanhua/"+bookNums[i]+".html"

     htmlBook = getHtml(urlBook)#获取本子html代码
     regPageNums = r"共(\d+)页"#获取总页数
     # 格式为http://pic.taov5.com/1/615/183-1.jpg
     #       http://pic.taov5.com/1/618/160.jpg
     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)#图片目录的第二个数字
     # 开始页码和结束页码
     rangeMin = int(imgStart2[0])
     # rangeMax = int(imgStart2[0]) + int(pageNums[0])
     pageNums = int(pageNums[0])
     print("正在下载:"+ bookNums[i] + "_" + bookNames[i])#给个下载提示本子名
     for pageNum in range(pageNums):
         urlImg = "http://pic.taov5.com/1/"+imgStart1[0]+"/"+str(rangeMin+pageNum)+".jpg"
         reqImg = urllib.request.Request(url=urlImg,headers=headers)

         try:
             responseImg = urllib.request.urlopen(reqImg)
             with open(str(pageNum)+".jpg","wb") as f:
                 img = responseImg.read()
                 f.write(img)
         except Exception as e:
             print("缺少第%d页,"%(pageNum+1),e)
             continue

         print("已下载%d页,共%d页"%(pageNum+1,pageNums))#提示下载几页了,放在后面比较好
         # os.system("pause")

 def downloadBook():
     bookNums = getNumsAndNames()[0]
     bookNames = getNumsAndNames()[1]
     # 打开每个本子网页,获取总页数,第一张图片的网址
     # <img alt="里番H少女漫画之發情關係" src="http://pic.taov5.com/1/615/143.jpg">
     for i in range(len(bookNums)):
         # 每个本子新建文件夹,下载完一个本子要返回上一级目录!!不然会一直新建子文件夹!
         # 断点续传,判断文件夹是否存在,如果不存在就创建,如果存在,判断里面的图片是否存在
         currentDir = os.getcwd()
         nameArray = []
         # 遍历当前文件夹,把所有文件夹名存入nameArray数组
         for i1,i2,i3 in os.walk(currentDir):
             nameArray.append(i2)
         nameArray = nameArray[0]
         # 名字数组里加上序号
         for eachname in nameArray:
             eachname = bookNums[i] + "_" + eachname
         # 如果文件夹已存在,输出这个文件夹名已存在
         if os.path.exists(bookNums[i] + "_" + bookNames[i]):
             print("已存在:"+bookNums[i] + "_" + bookNames[i])
         # 如果文件夹不存在,就新建文件夹,下载图片
         else:
             os.mkdir(bookNums[i] + "_" + bookNames[i])#新建文件夹
             os.chdir(bookNums[i] + "_" + bookNames[i])#跳转到指定目录#记得后面要返回上级目录!!

             downloadPic(i)

             os.chdir(os.path.dirname(os.getcwd()))#返回上级目录

 if __name__ == "__main__":
     downloadBook()
 # 后期实现功能:esc停止运行,空格暂停,断点续传判断图片是否存在

最新文章

  1. 找出只含有2,3,5因子构成的数的第N个
  2. 获取sql server数据库表结构
  3. VisualSVN-5.1.4补丁原创发布
  4. sql 中的回车和换行问题
  5. &lt;mvc:annotation-driven /&gt;与&lt;context:annotation-config /&gt;
  6. leetcode 103 Binary Tree Zigzag Level Order Traversal ----- java
  7. Razor视图引擎 语法
  8. Javascript加载速度慢解决办法
  9. Flex xxx-app.xml配置
  10. Tiny6410声卡驱动——录音与回放
  11. Java线程(学习整理)--4---一个简单的生产者、消费者模型
  12. CentOS6.5升级为CentOS7.0
  13. SQL Server 后续去除功能汇总
  14. mybatis分页控件
  15. 【Java基础】 static
  16. java中的递归
  17. WebSocket(3)---实现一对一聊天功能
  18. 【转】 glibc detected *** corrupted double-linked list:错误的原因有如下三种可能
  19. 指数加权移动平均法(EWMA)
  20. A short Glimpse to Spectral Sequences 快速入坑谱序列(英文)

热门文章

  1. webservice系统学习笔记8-简单的权限校验
  2. Jsp和session、request.getSession()
  3. iOS- 快速实现展示布局
  4. 微软解决方案框架 - MSF的团队模型、MSF的开发模型,关于SA系统分析师信息的一篇好帖子
  5. Jquery与mootools对比
  6. GO1.6语言学习笔记2-安装配置及代码组织
  7. Android-SQLiteOpenHelper
  8. pandas 筛选指定行或者列的数据
  9. 由于CentOS的系统安装了epel-release-latest-7.noarch.rpm 导致在使用yum命令时出现Error: xz compression not available问题
  10. Spark1.4.1 编译与安装