使用Urllib下载图片
程序员文章站
2022-05-09 12:09:31
urllib下载图片 urllib3下载图片 Urllib下载图片 1 from urllib import request 2 import re 3 import os 4 5 # 妹子图首页 下载首页的几张 6 url = 'https://www.mzitu.com' 7 # Request ......
- urllib下载图片
- urllib3下载图片
urllib下载图片
1 from urllib import request 2 import re 3 import os 4 5 # 妹子图首页 下载首页的几张 6 url = 'https://www.mzitu.com' 7 # request对象添加请求头方法一:数据为字典类型 8 headers = { 9 'user-agent': 'mozilla/5.0 (x11; cros i686 4319.74.0) applewebkit/537.36 (khtml, like gecko) chrome/29.0.1547.57 safari/537.36 ' 10 } 11 # 创建request实例 将url和请求头传入 12 req = request.request(url, headers=headers) 13 14 # 发起连接,返回的是一个对象,不使用代理 15 data = request.urlopen(req) 16 17 # 用read()方法,读取返回对象中的内容,取出每张图片的url 18 img_urls = re.findall("data-original='(.*?)'", data.read().decode()) 19 # 以数字给图片命名 20 name = 1 21 # 根据每张图片的url循环下载 22 for img_url in img_urls: 23 # 每张图片的url 24 print(img_url) 25 # 创建新的request对象,将url传入 26 req_img = request.request(url=img_url) 27 # request对象添加请求头方法二:数据为元组类型 28 req_img.add_header('referer', url) 29 img_data = request.urlopen(req_img) 30 # 判断是否存在这个目录、是否创建过一次 31 if name == 1 and not os.path.exists('urllib_img_test'): 32 os.mkdir('urllib_img_test') 33 # 判断是否第一次进入文件夹 34 if name == 1: 35 # 进入创建的文件夹 36 os.chdir('urllib_img_test') 37 img_name = str(name) + '.jpg' 38 # 保存图片 39 with open(img_name, 'wb') as f: 40 f.write(img_data.read()) 41 name += 1
urllib3下载图片
1 import urllib3 2 import re 3 import time 4 import os 5 6 # 判断文件夹是否存在,不存在就创建 7 if not os.path.exists('urllib3_img_test'): 8 os.mkdir('urllib3_img_test') 9 # 进入文件夹 10 os.chdir('urllib3_img_test') 11 12 # 妹子图首页 下载首页几个主题里面的所有图片 13 url = 'https://www.mzitu.com' 14 # 禁用警告 15 urllib3.disable_warnings() 16 req = urllib3.poolmanager() 17 # 添加请求头 18 headers = { 19 'user-agent': 'mozilla/5.0 (windows nt 6.1; rv:21.0) gecko/20130328 firefox/21.0' 20 } 21 # 发起请求 22 res = req.request('get', url, headers=headers) 23 # 取出数据 24 datas = re.findall('<li><a href=.*</li>',res.data.decode()) 25 26 for data in datas: 27 # 进入各个主题的url 取出的两个url是一样的,选一个就行了 28 type_imgs = re.findall('href="(.*?)"',data)[0] 29 # 主题的标题,取出来做文件夹名称 30 type_name = re.findall(" alt='(.*?)'",data)[0] 31 # 判断标题里是否有+,加斜杆转义,不影响正则判断 32 if '+' in type_name: 33 type_name = type_name.replace('+', '\+') 34 print(type_name,type_imgs) 35 # 进入各个主题,下载主题里的所有图片 36 type_data = req.request('get',type_imgs,headers=headers).data.decode() 37 # 图片的url 38 url_img = re.findall('{}.*" ><img src="(.*?)".*{}'.format(type_imgs, type_name), type_data) 39 # 每个主题的图片数量 40 num = int(re.findall('上一组.*<span>(.*)</span>.*下一页', type_data)[0]) 41 for i in range(1, num + 1): 42 # 每张图片的url 在主题url后面加数字 43 url_img = type_imgs + '/' + str(i) 44 print(url_img) 45 # 对每张图片的url发起请求 46 temp_url = req.request('get', url_img, headers=headers).data.decode() 47 # 每张图片的url 48 urls_img = re.findall('{}.*src="(.*?)".*{}'.format('https://www.mzitu.com', type_name), temp_url)[0] 49 print(urls_img) 50 # 请求头添加 referer 51 headers = { 52 'user-agent': 'mozilla/5.0 (windows nt 6.1; rv:21.0) gecko/20130328 firefox/21.0', 53 'referer': url_img 54 } 55 # 获得图片的内容,保存到本地 56 img_content = req.request('get', urls_img, headers=headers).data 57 # 判断标题里是否有斜杆,有就去掉 58 if '\\' in type_name: 59 type_name = type_name.replace('\\','') 60 # 判断文件夹是否存在,不存在就创建 61 if i ==1 and not os.path.exists(type_name): 62 os.mkdir(type_name) 63 # 进入文件夹 64 os.chdir(type_name) 65 img_name = str(i) +'.jpg' 66 with open(img_name, 'wb') as f: 67 f.write(img_content) 68 time.sleep(0.2) 69 # 返回上一级菜单创建新的文件夹下载其它主题的图片 70 os.chdir('..') 71 time.sleep(0.2)