使用Urllib下载图片

  1. urllib下载图片
  2. 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
Urllib下载图片

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)
Urllib3下载图片

猜你喜欢

转载自www.cnblogs.com/jiyu-hlzy/p/11784293.html
今日推荐