day_5.10py 爬妹子图片 mm131

  
  #目前学的爬虫还有潭州教育的直播课,都是千篇一律的requests urllib 下面这个也是,还没有我后面的下载网易云歌单爽来都用到多线程了不过可以用协程,完全异步
1
#!/usr/bin/env/python 2 #-*-coding:utf-8-*- 3 4 ''' 5 2018-5-9 20:16:57 6 下次查明原因 7 不会知道为什么报错 8 2018-5-10 19:32:39开始重新看视频 9 把那个代码删了重新编码一下 10 一切运行成功 11 代码没错应该是网站封我ip了 还是很不错的 12 py爬虫还是很强大的 13 2018-5-10 21:12:37 14 ''' 15 import requests #这个是访问http协议的模块 16 from urllib.request import urlopen,urlretrieve,urljoin,Request 17 import time #尽量来点休眠 18 import re 19 20 url = 'http://www.mm131.com/xinggan/' 21 22 def get_img(url,path,ref): 23 #url: jpg地址图像真正的地址 24 #path: 图像下载之后保存的路径 25 #ref: 图像的ref值 26 headers = { 27 'User-Agent':'Mozilla/5.0 (Windows NT 6.1; rv:2.0.1) Gecko/20100101 Firefox/4.0.1', 28 'Referer':ref 29 } 30 req = Request(url=url,headers=headers) 31 res = urlopen(req).read() 32 with open(path,'wb') as fp: 33 fp.write(res) 34 35 def download(home_url): 36 #一级列表页面 37 html = requests.get(home_url).content.decode('gbk') 38 urls = re.findall('list_6_[0-9]+.html',html) #相对路径 39 urls = [urljoin(home_url,url) for url in urls] 40 41 # 二级列表页 42 #http://www.mm131.com/qingchun/3982.html 43 urls_2 =[] 44 for url in set(urls):#从一级列表页下面去出来每一个链接 45 html = requests.get(url).content.decode('gbk') 46 for i in re.findall('http://www.mm131.com/xinggan/[0-9]+.html',html): 47 urls_2.append(i) 48 print(urls_2) 49 # 三级列表页 50 #3961_3.html 51 urls_3 = [] 52 for url in set(urls_2): 53 html = requests.get(url).content.decode('gbk') 54 for i in re.findall('[0-9_]+.html',html): 55 urls_3.append(i) 56 57 pic_url = {}#key值唯一.不需要额外去重 58 # 字典中: 59 # key: 图像地址 60 # value: Referer值 61 # ..jpg:...3333_1.html 62 # 从这个一个个的图片展示页面下提取真正的图片地址.jpg 63 for url in set(urls_3): 64 # http://img1.mm131.me/pic/3961/2.jpg 65 # http://img1.mm131.me/pic/3961/3.jpg 66 # http://img1.mm131.me/pic/[0-9]+/[0-9]+.jpg 67 html = requests.get(url).content.decode('gbk') 68 try: 69 i = re.findall('http://img1.mm131.me/pic/[0-9]+/[0-9]+.jpg', html)[0] 70 except: 71 print("[Error] 无效的链接:", url) 72 else: 73 pic_url[i] = url 74 # 从展示页面下,右键是可以看到的 75 # 但是直接通过url链接去访问就是不行的 76 # 防盗链 77 index = 0 78 for url in pic_url: 79 # key: 下载地址 80 # value: ref值 81 print('[+] 当前下载%d张:%s' % (index, url)) 82 get_img(url=url, path=str(index) + '.jpg', ref=pic_url[url]) 83 index += 1 84 85 download(url)
原文地址:https://www.cnblogs.com/zhen1996/p/9021767.html