20170912多线程Python爬取图片

import threading               #导入线程
from urllib import request #导入网页请求模块
import re                            #导入正则表达式模块
import os                           # 引入模块
from openpyxl import Workbook
from openpyxl import load_workbook
class customThread(threading.Thread):
    def __init__(self,imgurl,imgpath):
        threading.Thread.__init__(self)
        self.imgurl=imgurl
        self.imgpath=imgpath
    def run(self):
        #print('downloading : ',self.imgpath)
        downloadimg(self.imgurl,self.imgpath)
def downloadimg(imgurl,imgpath):
    try:                   #实践中发现会出现网页访问失败返回404的情况
        response=request.urlopen(imgurl) #访问图片地址
        imgcontents=response.read()      #获取图片内容
    except:
        print(imgpath +'下载出错')
    else:
        f=open(imgpath,'wb')  #打开文件
        f.write(imgcontents)    #写入内容
        f.close                         #关闭文件
        print('保存成功>>>>'+ imgpath )
        
def getimageurl(weburl,folder,imgname):
    response=request.urlopen(weburl)#打开网页,获取响应文本
    page=response.read()            #读取网页源码
    js= page.decode('utf-8')        #转码
    print(js)
    pat=re.compile(r'(?<="//)www.dhresource.com/.*?\.jpg')  #编译匹配模式
    match=re.findall(pat,js)        #匹配网页源码
    if match:                       #若匹配则输出
        #print ('匹配成功')
        n=0
        for each_match in match:
            n+=1
            imgurl='http://'+each_match
            imgpath=folder +"\\"+ imgname+"_" +str(n)+'.jpg'
            customThread(imgurl,imgpath).start()  #调用下载图片函数
def mkdir(path):
    # 去除首位空格
    path=path.strip()
    # 去除尾部 \ 符号
    path=path.rstrip("\\")
    # 判断路径是否存在
    isExists=os.path.exists(path)
    # 判断结果
    if not isExists:
        # 如果不存在则创建目录
        # 创建目录操作函数
        os.makedirs(path) 
        print(path+' 创建成功')
        return True
    else:
        # 如果目录存在则不创建,并提示目录已存在
        print(path+' 目录已存在')
        return False
    
if __name__ == "__main__":
    print('!!!!!!开始运行!!!!!!')
    wb = load_workbook('URL.xlsx')
    ws=wb.active
    for i in range(2,51):
        #print(ws.cell(row=i,column=1).value)
        if ws.cell(row=i,column=1).value!=None:
            imgname=str(ws.cell(row=i,column=1).value)
            folder=os.getcwd() +"\\"+imgname
            print(mkdir(folder))
            weburl=ws.cell(row=i,column=2).value
            getimageurl(weburl,folder,imgname)
            
    print('!!!!!!运行结束!!!!!!')
    

  

posted @ 2017-09-12 17:33  wangway  阅读(1162)  评论(0编辑  收藏  举报