欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

使用Urllib下载图片

程序员文章站 2023-02-03 18:12:09
urllib下载图片 urllib3下载图片 Urllib下载图片 1 from urllib import request 2 import re 3 import os 4 5 # 妹子图首页 下载首页的几张 6 url = 'https://www.mzitu.com' 7 # Request ......
  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

 

 

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)