zoukankan      html  css  js  c++  java
  • 使用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下载图片
  • 相关阅读:
    MySQL学习笔记(六):索引
    正则表达式基础知识,持续更新…
    js改变盒子大小(上下左右)分析
    表单自定义样式
    js拖拽分析
    javascript右键菜单分析
    简要分析javascript的选项卡和轮播图
    表单联动的总结
    浅显总结ASCII Unicode UTF-8的区别
    瀑布流知识的延伸
  • 原文地址:https://www.cnblogs.com/jiyu-hlzy/p/11784293.html
Copyright © 2011-2022 走看看