Python抓取html中table数据

SC

def table_Excel(tableHtml):
    soup = BeautifulSoup(content, 'html.parser')
    tables = soup.find_all('table')  # 查看当前html页面所有table 元素<可能含有多个>
    file_name = "export{}.xlsx".format(time.time())  # 导出文件名
    # ExcelWriter is the class for writing DataFrame objects into excel sheets.
    writer = pd.ExcelWriter(file_name, engine='xlsxwriter')  # Excel 写操作对象
    workbook = writer.book  # 创建工作簿
    for idx, table in enumerate(tables):
        table_title = 'Table-' + str(idx)
        # Read HTML tables into a list of DataFrame objects.
        df_table = pd.read_html(str(table), header=0, flavor='bs4')[0]
        df_table.dropna(how='all', inplace=True)  # 当一整行都是nan时,去掉该行
        # print(df_table)
        df_table.to_excel(writer, index=False, sheet_name=table_title)  # 将df对象转换成Excel表格

        worksheet = writer.sheets[table_title] # 添加该子表
        # 对工作簿添加样式
        header_fmt = workbook.add_format({'font_size': 14, 'bold': True, 'fg_color': '#D7E4BC', 'border': 1})
        # 对子表的第一行的字段设置样式
        for col_num, value in enumerate(df_table.columns.values):
            worksheet.write(0, col_num, value, header_fmt)
        # 设置工作簿列宽
        worksheet.set_column('A:Z', 25)
    # # Close the Pandas Excel writer and output the Excel file.
    writer.save()
    print('Export End!')

Analyse

  • 实现的功能:将html 中所有table汇成n个子表,对子表首行设置样式
  • 处理html中table的步骤:
    1. 利用BS解析html文件,找出所有table标签
    2. 设置导出文件名
    3. 初始化ExcelWriter变量,传入导出文件名
    4. 创建工作簿
    5. 遍历n个table标签
    6. 设置子表名
    7. 利用pd.read_html方法将html 中的table对象转换成df对象
    8. 清理nan数据
    9. 将df对象转化成excel对象,传入writer和子表名称等等
    10. 生成worksheet 子表对象
    11. 为工作簿添加表头格式
    12. 遍历子表第一行的列值,为其 添加表头格式
    13. 关闭writer 对象,输出Excel文件

Differ

  • workbook ,worksheet,df和writer的区别:
  1. workbook工作簿
  2. worksheet 子表
  3. df 对象
  4. writer 为把df对象写入excel表中的类
  • 2
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值