之前用过openpyxl库保存数据到Excel文件写入不了,换用xlsxwriter

批量插入图片到Excel表中

 1 import os
2 import requests
3 import re
4 from openpyxl import load_workbook
5 import xlsxwriter
6 from multiprocessing.dummy import Pool as ThreadPool
7 from openpyxl.drawing.image import Image
8
9 def spider(url):
10 headers = {
11 'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.132 Safari/537.36'}
12 html = requests.get(url, headers, timeout=None)
13 pic_url = re.findall('class="product-image">.*?<img src="(.*?)" height="', html.text, re.S)
14 sku = re.findall('q=(\d+)', url, re.S)#正则匹配链接后面的sku
15 if pic_url != []:
16 print('正在下载'+sku[0]+'图片,图片地址:' + pic_url[0])
17 pic = requests.get(pic_url[0])
18 dir = cwd + '\\images\\' + sku[0] + '.jpg'
19 # print(dir)
20 with open(dir, 'wb') as file:
21 file.write(pic.content)
22 else:
23 if sku !=[]:
24 print('没有找到' + sku[0]+'产品')
25 No_images.append(sku[0])
26 #之前用过openpyxl创建新的Excel文件,但是写入不了,之后换用xlsxwriter保存数据到Excel
27 def save_excel(sku):
28 print(sku)
29 wb1 = xlsxwriter.Workbook(cwd + '\\' + 'No_images.xlsx')
30 ws1 = wb1.add_worksheet()
31 ws1.write(0, 0, 'No_images_sku')
32 for i in range(1,len(sku)+1):
33 ws1.write(i, 0, sku[i-1])
34 wb1.close()
35 print('保存没有图片的sku成功!')
36
37 #插入图片到Excel
38 def insert_images(sku):
39 wb = load_workbook(path)
40 ws = wb.worksheets[0]
41 img_path = cwd + '\\images\\'+sku+'.jpg'
42 print(img_path)
43 ws.column_dimensions['H'].width = 11#设置单元格列宽
44 try:
45 img = Image(img_path)
46 #设置图片大小
47 img.width = 80
48 img.height = 96
49 # print(img)
50 for i in range(1,ws.max_row+1):
51 if ws.cell(i,2).value == int(sku):
52 ws.row_dimensions[i].height = 88#设置单元格行高
53 ws.add_image(img,'H'+str(i))
54 wb.save(path)
55 except(FileNotFoundError) as e:
56 print(e)
57 wb.close()#每次插入一张图片需要关闭一次Excel表
58
59 if __name__ == '__main__':
60 cwd=os.getcwd()
61 path = cwd + '\\'+'图片测试.xlsx'
62 wb =load_workbook(path)
63 ws = wb.worksheets[0]
64 pool =ThreadPool(50)#开启多少个进程,四核电脑
65 urls = []
66 No_images = []
67 for i in range(1, ws.max_row+1):#通过循环将Excel数据读取出来
68 sku = ws.cell(i,2).value
69 if sku !=None:
70 print('正在爬取第'+str(i)+'个sku图片')
71 url = 'http://www.fulchic.com/catalogsearch/result/?q=' + str(sku)
72 urls.append(url)
73 pool.map(spider,urls)#多线程工作,其中,spider是爬虫函数名,urls是个爬取链接列表
74 pool.close()
75 pool.join()
76 #保存图片到本地
77 save_excel(No_images)
78 #循环写入保存图片,并设置单元格和图片大小
79 for i in range(1, ws.max_row + 1): # 通过循环将Excel数据读取出来
80 sku = ws.cell(i, 2).value
81 if sku != None:
82 print('正在保存第' + str(i) + '个sku图片')
83 insert_images(str(sku))

Python多线程Threading爬取图片,保存本地,openpyxl批量插入图片到Excel表中的更多相关文章

  1. python实现scrapy爬取图片到本地时的sha1摘要算法文件名

    2017-03-29 Scrapy爬图片到本地应该会给图片自动生成sha1摘要算法文件名,我第一次用scrapy也不清楚太多,就在程序里自己写了一段实现这一功能的代码.需import hashlib ...

  2. 【Python】- scrapy 爬取图片保存到本地、且返回保存路径

    https://blog.csdn.net/xueba8/article/details/81843534

  3. PHP 爬取图片 保存本地

    public function getImage($url,$filename='') { if($url == ''){ return false; } if($filename == ''){ $ ...

  4. 用python库openpyxl操作excel,从源excel表中提取信息复制到目标excel表中

    现代生活中,我们很难不与excel表打交道,excel表有着易学易用的优点,只是当表中数据量很大,我们又需要从其他表册中复制粘贴一些数据(比如身份证号)的时候,我们会越来越倦怠,毕竟我们不是机器,没法 ...

  5. python多线程threading.Lock锁用法实例

    本文实例讲述了python多线程threading.Lock锁的用法实例,分享给大家供大家参考.具体分析如下: python的锁可以独立提取出来 mutex = threading.Lock() #锁 ...

  6. Python xlrd模块读取Excel表中的数据

    1.xlrd库的安装 直接使用pip工具进行安装(当然也可以使用pycharmIDE进行安装,这里就不详述了) pip install xlrd 2.xlrd模块的一些常用命令 ①打开excel文件并 ...

  7. python xlrd 模块(获取Excel表中数据)

    python xlrd 模块(获取Excel表中数据) 一.安装xlrd模块   到python官网下载http://pypi.python.org/pypi/xlrd模块安装,前提是已经安装了pyt ...

  8. scrapy爬虫系列之三--爬取图片保存到本地

    功能点:如何爬取图片,并保存到本地 爬取网站:斗鱼主播 完整代码:https://files.cnblogs.com/files/bookwed/Douyu.zip 主要代码: douyu.py im ...

  9. python +requests 爬虫-爬取图片并进行下载到本地

    因为写12306抢票脚本需要用到爬虫技术下载验证码并进行定位点击所以这章主要讲解,爬虫,从网页上爬取图片并进行下载到本地   爬虫实现方式: 1.首先选取你需要的抓取的URL:2.将这些URL放入待抓 ...

随机推荐

  1. Spring Cloud Alibaba分布式事务组件 seata 详解(小白都能看懂)

    一,什么是事务(本地事务)? 指作为单个逻辑工作单元执行的一系列操作,要么完全地执行,要么完全地不执行. 简单的说,事务就是并发控制的单位,是用户定义的一个操作序列.      而一个逻辑工作单元要成 ...

  2. 变量 Java day 5

    Java 第五天的学习 变量 变量注意事项 变量的底层 ASCII编码表 1.什么是变量? 概念:变量及代数. 在Java中,变量分为两种:基本类型的变量和引用类型的变量 1>基本类型的变量:必 ...

  3. kafka消费组创建和删除原理

    0.10.0.0版本的kafka的消费者和消费组已经不在zk上注册节点了,那么消费组是以什么形式存在的呢? 1 入口 看下kafka自带的脚本kafka-consumer-groups.sh,可见脚本 ...

  4. spring-boot-learning-监控相关

    springboot提供了对项目的监控功能,首先我们需要引入需要的jar包: <!--监控包--> <!-- https://mvnrepository.com/artifact/o ...

  5. Spring Cloud第一次请求报错问题

    一.原因 我们在使用Spring Cloud的Ribbon或Feign来实现服务调用的时候,第一次请求经常会经常发生超时报错,而之后的调用就没有问题了.造成第一次服务调用出现失败的原因主要是Ribbo ...

  6. 转:C++11常用新特性快速一览

    转载至:https://blog.csdn.net/jiange_zh/article/details/79356417 1.nullptr nullptr 出现的目的是为了替代 NULL. 在某种意 ...

  7. FPGA入门到精通系列1:数字电路基础知识

      本文主要介绍数字电路基础知识,用最简洁的内容介绍最核心的知识. 1.数字电路是什么? 数字电路是利用电源电压的高电平和低电平分别表示1和0,进而实现信息的表达.模拟信号:随时间连续变化的信号.处理 ...

  8. PCB布线总的原则

    转自张飞实战电子公众号 PCB布线总的原则 最短路径和减少干扰 PCB布线的总的流程大致如下: 1了解制造厂商的制造规范-线宽,线间距,过孔要求及层数要求: 2确定层数并定义各层的功能: 3设计布线规 ...

  9. centos报错:Could not retrieve mirrorlist http://mirrorlist.centos.org/

    检查是否可以上网. ping 114.114.114.114 如果不可以,调试通.通了之后下一步: 然后检查DNS设置是否正常. ping www.baidu.com 不正常的话,设置DNS,如下: ...

  10. vue获取验证码倒计时

    <template> <div> <el-button :disabled="disabled" @click="sendcode" ...