1、普通函数方法版

将爬取的数据保存到excel表格 , 数据会比较直观。下面以保存python的关键词为例,介绍将数据保存到excel的详细流程。

第一步、导入模块

import xlwt  # 导入写入excel需要的包

第二步、定义函数,将爬取好的数据保存到excel文件中。

def write_to_excel(filename, lst):
    # 为防止写入失败,捕获异常
    try:
        # 1 创建一个workbook,相当于创建excel文件
        work_book = xlwt.Workbook(encoding='utf-8')
        # 2 创建一个sheet表单
        sheet = work_book.add_sheet('python_word')  # python_word 为表的名字
        # 3,写表头
        heads = ['英文', '中文']
        for i in range(len(heads)):
            sheet.write(0, i, heads[i])  # write(行,列,内容)   行,列都是默认 0 开始
        # 4,写入内容
        j = 1  # 从第二行开始
        for item in lst:
            sheet.write(j, 0, item['en'])  # 第二行,第一列
            sheet.write(j, 1, item['zh'])  # 第二行,第二列
            j += 1
        # 5,保存文件
        work_book.save(filename)
        print('写入成功')
    except Exception:
        print('写入失败')

第三步、传入文件名、爬取的列表格式数据两个实参,调用函数,大功告成。

2、升级版,封装成模块

工作中,由于我们爬取的数据量时非常庞大的,将爬取的数据全部先保存到列表后,再写入excel,由于列表的底层结构是基于数组实现的,一旦存储的数据非常大的时候,写入的性能会受到影响。所以等列表储存到一定量的数据后,先写入到excel,再清空列表,保证列表的写入效率。所以在定义方法时,可以定义首次写入和追加写入两种方法。

爬取好的数据要保存到excel中,可以直接调用定义好的类方法,传入文件名和数据列表两个参数,就可以保存到excel中。还可以将该脚本封装成包模块(有__init__.py)文件,放到自己的python解释器安装的目录下的\Lib\site-packages目录下(C:\Anaconda3\Lib\site-packages),就可以作为内置模块使用,导入方式:from excel_utils.excel_utils import Excel_util

# 下载安装 pip install xlutils
from xlutils.copy import copy
import xlwt
import xlrd

class Excel_util(object):
    # 首次写入方法
    @staticmethod  # 就可以不需要实例化,直接类名.方法名,就可以调用方法
    def write_to_excel(path, info_list):
        '''
        :param path: xls文件路径
        :param info_list: [item1,item]item{}
        :return:
        '''
        # 创建workbook
        workbook = xlwt.Workbook(encoding='utf-8')
        # 创建sheet
        sheet = workbook.add_sheet('parse_data')
        # 写表头
        heads = [key for key in info_list[0].keys()] # 遍历出字典中的key
        print(heads)
        for i in range(len(heads)):
            sheet.write(0,i,heads[i])
        j = 1
        for item in info_list:
            # print(item) # 是字典,使用枚举enumerate可以同时获得索引,键和值
            for r,key in enumerate(item.keys()):
                sheet.write(j,r,item[key])
            j += 1
        workbook.save(path)
        print('第一次写入成功!')

    # 后续追加写入的方法
    @staticmethod
    def write_to_excel_append(path, info_list):
        workbook = xlrd.open_workbook(path)  # 打开工作簿
        sheets = workbook.sheet_names()  # 获取工作簿中的所有表格
        worksheet = workbook.sheet_by_name(sheets[0])  # 获取工作簿中所有表格中的的第一个表格
        rows_old = worksheet.nrows  # 获取表格中已存在的数据的行数
        new_workbook = copy(workbook)  # 将xlrd对象拷贝转化为xlwt对象
        new_worksheet = new_workbook.get_sheet(0)  # 获取转化后工作簿中的第一个表格
        i = rows_old
        # print(i)
        for item in info_list:
            for j, key in enumerate(item.keys()):
                new_worksheet.write(i, j, item[key])
            i += 1
        new_workbook.save(path)  # 保存工作簿
        print("追加写入成功!")
Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐