Python利用requests模块下载图片实例代码

yipeiwu_com6年前Python基础

本文主要介绍的是关于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()

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对【听图阁-专注于Python设计】的支持。

相关文章

基于pytorch的保存和加载模型参数的方法

当我们花费大量的精力训练完网络,下次预测数据时不想再(有时也不必再)训练一次时,这时候torch.save(),torch.load()就要登场了。 保存和加载模型参数有两种方式: 方式...

使用Numpy读取CSV文件,并进行行列删除的操作方法

Numpy是Python强大的数据计算和处理模块,其操作数据非常迅速且简单易行。 首先读取CSV文件 >>> import numpy as np#导入numpy模...

Python中的os.path路径模块中的操作方法总结

解析路径 路径解析依赖与os中定义的一些变量: os.sep-路径各部分之间的分隔符。 os.extsep-文件名与文件扩展名之间的分隔符。 os.pardir-路径中表示...

python与php实现分割文件代码

python与php实现分割文件代码

前两天有个朋友说,想实现一个文本文件按照固定行数进行分割成多个文本文件,却不知如何实现。如果数据量小手动分割下就好了,如果数据量很大的话手动完成实在太耗费人力了,也不现实。那么就需要借助...

使用Python做定时任务及时了解互联网动态

使用Python做定时任务及时了解互联网动态

前言 本人因为比较喜欢看漫画和动漫, 所以总会遇到一些问题, 因为订阅的漫画或者动漫太多, 总会忘记自己看到那一章节或者不知道什么时候更新. 故会有这么一个需求, 想记录自己想看的漫画或...