Python多线程Threading爬取图片,保存本地,openpyxl批量插入图片到Excel表中
之前用过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表中的更多相关文章
- python实现scrapy爬取图片到本地时的sha1摘要算法文件名
2017-03-29 Scrapy爬图片到本地应该会给图片自动生成sha1摘要算法文件名,我第一次用scrapy也不清楚太多,就在程序里自己写了一段实现这一功能的代码.需import hashlib ...
- 【Python】- scrapy 爬取图片保存到本地、且返回保存路径
https://blog.csdn.net/xueba8/article/details/81843534
- PHP 爬取图片 保存本地
public function getImage($url,$filename='') { if($url == ''){ return false; } if($filename == ''){ $ ...
- 用python库openpyxl操作excel,从源excel表中提取信息复制到目标excel表中
现代生活中,我们很难不与excel表打交道,excel表有着易学易用的优点,只是当表中数据量很大,我们又需要从其他表册中复制粘贴一些数据(比如身份证号)的时候,我们会越来越倦怠,毕竟我们不是机器,没法 ...
- python多线程threading.Lock锁用法实例
本文实例讲述了python多线程threading.Lock锁的用法实例,分享给大家供大家参考.具体分析如下: python的锁可以独立提取出来 mutex = threading.Lock() #锁 ...
- Python xlrd模块读取Excel表中的数据
1.xlrd库的安装 直接使用pip工具进行安装(当然也可以使用pycharmIDE进行安装,这里就不详述了) pip install xlrd 2.xlrd模块的一些常用命令 ①打开excel文件并 ...
- python xlrd 模块(获取Excel表中数据)
python xlrd 模块(获取Excel表中数据) 一.安装xlrd模块 到python官网下载http://pypi.python.org/pypi/xlrd模块安装,前提是已经安装了pyt ...
- scrapy爬虫系列之三--爬取图片保存到本地
功能点:如何爬取图片,并保存到本地 爬取网站:斗鱼主播 完整代码:https://files.cnblogs.com/files/bookwed/Douyu.zip 主要代码: douyu.py im ...
- python +requests 爬虫-爬取图片并进行下载到本地
因为写12306抢票脚本需要用到爬虫技术下载验证码并进行定位点击所以这章主要讲解,爬虫,从网页上爬取图片并进行下载到本地 爬虫实现方式: 1.首先选取你需要的抓取的URL:2.将这些URL放入待抓 ...
随机推荐
- centos配置ssh服务并简单测试
最近在做计算机集群方面的东西,简单弄了一下ssh服务. 首先把前提情况介绍一下: 1.我是用的虚拟机先模拟的,也不是没有真机,就是跑来跑去麻烦. 2.装了三个相同配置的centos虚拟机,详细参数就不 ...
- Mysql之InnoDB行格式、数据页结构
Mysql架构图 存储引擎负责对表中的数据的进行读取和写入,常用的存储引擎有InnoDB.MyISAM.Memory等,不同的存储引擎有自己的特性,数据在不同存储引擎中存放的格式也是不同的,比如Mem ...
- JSP是什么?有什么特点?
JSP全称是Java Server Pages,它和servle技术一样,都是SUN公司定义的一种用于开发动态web资源的技术.在Servlet当中开发嵌入html的脚本,会非常的繁琐.JSP支持在h ...
- Dubbo 的整体架构设计有哪些分层?
接口服务层(Service):该层与业务逻辑相关,根据 provider 和 consumer 的 业务设计对应的接口和实现 配置层(Config):对外配置接口,以 ServiceConfig 和 ...
- Dubbo 配置文件是如何加载到 Spring 中的?
Spring 容器在启动的时候,会读取到 Spring 默认的一些 schema 以及 Dubbo 自 定义的 schema,每个 schema 都会对应一个自己的 NamespaceHandler, ...
- elasticsearch 了解多少,说说你们公司 es 的集群架构,索 引数据大小,分片有多少,以及一些调优手段 ?
面试官:想了解应聘者之前公司接触的 ES 使用场景.规模,有没有做过比较大 规模的索引设计.规划.调优. 解答: 如实结合自己的实践场景回答即可. 比如:ES 集群架构 13 个节点,索引根据通道不同 ...
- Java并发机制(7)--线程池ThreadPoolExecutor的使用
Java并发编程:线程池的使用整理自:博客园-海子-http://www.cnblogs.com/dolphin0520/p/3932921.html 1.什么是线程池,为什么要使用线程池: 1.1. ...
- JavaScript HTML5事件
有3个页面级事件在HTML5版本中被引入. 事件 说明 DOMContentLoaded 在DOM树形成后触发(与此同时,图片.CSS和JavaScript可能还在加载).在这个事件中,脚本运 ...
- 用maven建立一个工程2
下载之后把下载的包解压出来
- 图灵机器人 V1 和 V2 接入方法
API1.0使用方法: import requests import json import yuyinhecheng as hc def Tuling(words): Tuling_API_ ...