• Python使用requests模块下载图片


    MySQL中事先保存好爬取到的图片链接地址。

    然后使用多线程把图片下载到本地。

    # coding: utf-8
    import MySQLdb
    import requests
    import os
    import re
    from threading import Thread
    import datetime
    
    header = {'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) '
                            'Chrome/63.0.3239.132 Safari/537.36'}
    file_path = 'F:\mlu2'
    if not os.path.exists(file_path):
        os.mkdir(file_path)
    
    
    class Spider(object):
        def __init__(self, file_path, header):
            self.file_path = file_path
            self.header = header
    
        @staticmethod
        def timer(func):
            def time_count(*args):
                start_time = datetime.datetime.now()
                func(*args)
                end_time = datetime.datetime.now()
                day = (end_time - start_time).days
                times = (end_time - start_time).seconds
                hour = times / 3600
                h = times % 3600
                minute = h / 60
                m = h % 60
                second = m
                print "爬取完成"
                print "一共用时%s天%s时%s分%s秒" % (day, hour, minute, second)
            return time_count
    
        def get_link(self):
            conn = MySQLdb.connect(host='localhost',
                                   port=3306,
                                   user='root',
                                   passwd='729814',
                                   db='mlu',
                                   charset='utf8')
            cur = conn.cursor()
            sql = 'select image from msg limit 100'  # image为事先爬取存到MySQL的图片链接地址
            cur.execute(sql)
            img_link = cur.fetchall()
            return img_link
    
        def download(self, link):
            filename = re.findall(r'.*/(.+)', link)[0]
            try:
                pic = requests.get(link, headers=self.header)
                if pic.status_code == 200:
                    with open(os.path.join(self.file_path)+os.sep+filename, 'wb') as fp:
                        fp.write(pic.content)
                        fp.close()
                print "下载完成"
            except Exception as e:
                print e
    
        @timer
        def run_main(self):
            threads = []
            links = self.get_link()
            for link in links:
                img = str(link[0])
                t = Thread(target=self.download, args=[img])
                t.start()
                threads.append(t)
            for t in threads:
                t.join()
    
    
    spider = Spider(file_path, header)
    spider.run_main()
  • 相关阅读:
    urllib使用四--urlencode,urlparse,
    urllib使用三--urlretrieve下载文件
    urllib使用二
    urllib使用一
    python使用网易邮箱发邮件
    python QQ邮件发送邮件
    可以字符串string转化成list,tuple,dict的eval()方法
    一行代码将两个列表拼接出第三个列表(两个可迭代对象相加产生第三个可迭代对象)--map()方法
    把列表中的元素拼接成字符串
    Runtime 类
  • 原文地址:https://www.cnblogs.com/delav/p/9398825.html
Copyright © 2020-2023  润新知