用过openpyxl、xlrd、xlwd等操作excel的第三方库之后,自我感觉最好用的就是xlsxwriter模块了,下面介绍一下自己使用之后的感觉
1、xlsxwriter模块介绍
xlsxwriter模块可以想excel表格中导入文本、数字、公式图片等等许多功能
但是xlsxwriter也有个非常大的缺点:不支持读取excel表格,也不能修改已经存在的excel表格,也就是说如果使用该模块去操作excel表,那么就必须从新创建文件进行文件写入工作,否则就会覆盖数据
导入:
import xlsxwriter
2、基本介绍
创捷新的excel表格:
workbook = xlsxwriter.Workbook('模块名.xlsx')
可以动态添加sheet表单
worksheet = workbook.add_worksheet(表单名称)
可以对特定位置进行单元格大小设置
worksheet.set_column('B:B', 30)
worksheet.set_row(1, 30)
worksheet.set_column设置行款,第一个参数相同则为确定的单元格行宽,如果不同,如:A:F,代表从A列到F列的行宽为后面的数值
worksheet.set_row设置行高,第一个值为行编号,后面的值为大小
插入图片
worksheet.insert_image('B1',file,
{
'x_scale': 0.1, 'y_scale': 0.1})
第一个参数为插入的位置,第二个参数为图片地址,第三个参数为图片的缩放大小,对图片的操作
附上爬虫代码结合excel进行数据爬虫:
def ons(shop_id):
headers = {
'authority': 'list.tmall.com',
'upgrade-insecure-requests': '1',
'user-agent': random.choice(ua),
'sec-fetch-user': '?1',
'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9',
'sec-fetch-site': 'same-origin',
'sec-fetch-mode': 'navigate',
'referer': 'https://list.tmall.com/search_product.htm?spm=a220m.1000858.1000724.1.7f4c47a8M2pPSx&q=%B7%F6%CA%D6&sort=s&style=g&from=.list.pc_1_searchbutton',
'accept-encoding': 'gzip, deflate, br',
'accept-language': 'zh-CN,zh;q=0.9'
}
url = f'https://detail.tmall.com/item.htm?id={shop_id}'
res = requests.get(url=url, headers=headers, proxies=ip_get())
res.encoding = 'gbk'
res = res.text
re_spuID = re.compile('spuId":"(.*?)"', re.S | re.M)
try:
spuID = re.findall(re_spuID, res)[0]
except:
print('错误')
spuID = ""
print('spuID', spuID)
html = etree.HTML(res)
all_sku_details_list = html.xpath('//div[@class="tb-sku"]//dl[contains(@class,"tb-prop tm-sale-prop tm-clear")]')
sku_id_list = [] # 例如:[4485582047905,4485582047906]
# print(res)
# print(len(all_sku_details_list))
for i in all_sku_details_list:
sku_id = i.xpath('.//li/@data-value')
sku_id_list.append(sku_id)
if len(sku_id_list) > 1:
sku_id_list = lists_combination(sku_id_list, code=';')
# print('sku_id_list',sku_id_list)
mapping_num_list = [] # 当前商品的全部sku对比码:例如:['1627207:3232481', '1627207:28335',]
sku_num_name = {
} # 对比码的sku对应的名称,例如:{'1627207:3232481': [{'title': '', 'shop_img': ''}]}
for i in all_sku_details_list:
for k in i.xpath('.//li'):
title = k.xpath('string(.//span)') # 有的没有title属性,只能获取span值
mapping_num = k.xpath('./@data-value')[0]
try:
shop_img = re.findall('\((.*?)\)', k.xpath('.//a/@style')[0])[0]
except:
shop_img = k.xpath('.//a/@style')
mapping_num_list.append(mapping_num)
sku_num_name[str(mapping_num)] = [{
'title': title, 'shop_img'