使用urllib3对应目录下载图片

基本流程

  1. 创建实例调用函数

    req = urllib3.PoolManager()

  2. 建立连接,构造http请求

    data = req.request('GET', 'http://www.weimeitupian.com/page/{}'.format(page))

  3. 分析源代码,正则抓取数据:

    item = re.findall(r'</a></div>-->.*?<img src="(.*?)" alt="(.*?)" class="thumb" />', data.data.decode(), re.S)

  4. 清洗数据并分类

完整代码:

import re, urllib3, os


def save_image(items):
    for item in items:
        if not item[0]:
            continue
        image_path = './images/{}'.format(item[1])
        # print(2)
        if not os.path.exists(image_path):      # 判断文件夹不存在
            os.mkdir(image_path)
        image_url = item[0]                     # 有域名的直接请求
        if not 'http' in item[0]:               # 有些图片url没有域名
            image_url = '{}{}'.format('http://www.weimeitupian.com/', item[0])

        image_content = req.request('GET', image_url)   # 网络io请求, 会等待响应返回,这是慢的原因
        # print(image_content)
        with open('{}/{}'.format(image_path, item[0].split('/')[-1]), 'wb')as f:
            f.write(image_content.data)


if __name__ == '__main__':
    req = urllib3.PoolManager()
    for page in range(1, 4):
        print('正在下载第{}页的数据...'.format(page))
        data = req.request('GET', 'http://www.weimeitupian.com/page/{}'.format(page))
        # print(data)
        item = re.findall(r'</a></div>-->.*?<img src="(.*?)" alt="(.*?)" class="thumb" />', data.data.decode(), re.S)
        # print(item)
        save_image(item)

使用多线程

import re
import urllib3
import os
import time
from threading import Thread


def image_request(url, item, image_path):
    image_content = req.request('GET', url)  # 网络io请求, 会等待响应返回,这是慢的原因
    with open('{}/{}'.format(image_path, item[0].split('/')[-1]), 'wb')as f:
        f.write(image_content.data)


def save_image(items):
    for item in items:
        if not item[0]:
            continue
        image_path = './images/{}'.format(item[1])

        if not os.path.exists(image_path):      # 判断文件夹不存在
            os.mkdir(image_path)
        image_url = item[0]                     # 有域名的直接请求
        if not 'http' in item[0]:               # 有些图片url没有域名
            image_url = '{}{}'.format('http://www.weimeitupian.com/', item[0])

        # 创建线程实例并启动
        t = Thread(target=image_request, args=(image_url, item, image_path))
        t.start()


if __name__ == '__main__':
    stat_time = time.time()
    req = urllib3.PoolManager()
    for page in range(1, 4):
        print('正在下载第{}页的数据...'.format(page))
        data = req.request('GET', 'http://www.weimeitupian.com/page/{}'.format(page))
        # print(data)
        item = re.findall(r'</a></div>-->.*?<img src="(.*?)" alt="(.*?)" class="thumb" />', data.data.decode(), re.S)
        # print(item)
        save_image(item)
    end_time = time.time()
    print('耗时{}s'.format(end_time-stat_time))
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值