优草派  >   Python

Python如何实现读取HTML表格?如何解决pd.read_html()读取数据不完整?

翟嘉慧            来源:优草派

对于大部分刚入门python的小伙伴来说,python如何读取html表格问题上还存在疑惑,今天带大家了解有关读取文件的一些操作,文件内容详细,操作简单,快跟着我一起来学习有关“Python如何实现读取HTML表格?如何解决pd.read_html()读取数据不完整?”吧,希望对大家的学习带来一定的帮助!

Python如何实现读取HTML表格?如何解决pd.read_html()读取数据不完整?

在python中,有读取一个html表格的功能,但是在操作的过程中不注意的话,可能会报错,比如我们现在有一个数据是xls格式的文件,我们对这个文件进行执行时,会遇到脚本的报错,

Xlrd报错:

xlrd.biffh.XLRDError: Unsupported format, or corrupt file: Expected BOF record; found b'<html xm'

读取xlrd的脚本代码如下:

data_lines = read_excel_file(self.file_path)
def read_excel_file(file_path):
    """
    读取一个excel文件
    """
    import xlrd
    print('[Info] excel file: {}'.format(file_path))
    book = xlrd.open_workbook(file_path)
    sheet = book.sheet_by_index(0)
    data_lines = []
    for row in range(0, sheet.nrows):
        line_data = []
        for column in range(0, sheet.ncols):
            val = sheet.cell(row, column).value
            line_data.append(val)
        data_lines.append(line_data)
    return data_lines  # 二维数组

在这个代码里面,存在报错的原因就是它的文件格式是一个html,而我们使用pandas来对read_html读取文件的时候,需要将所有的nan替换为空字符,还要保持数据的一致性。

具体使用方法如下:

def read_html_table(file_path):
    """
    读取html表格
    """
    import pandas as pd
    pd_table = pd.read_html(file_path)
    df = pd_table[0]
    df_data = df.values.tolist()
    df_data = df_data[1:]
    for r_idx, row in enumerate(df_data):
        for c_idx, value in enumerate(row):
                      if value != value:
                df_data[r_idx][c_idx] = ""
    return df_data

这就是一个正确的使用pandas来读取一个html文件。

在使用read_html读取数据时,假设我们遇到的是一个比较大的数据,使用这个来读取部分数据的话,会发现在read_html中读出来的数据是不完整的,那么如何解决这个问题呢? 

首先我们可以先检查一下html和table,如果都没有问题的话,那就是pd.read_html的默认解析器问题,我们可以去默认的 'lxml' 解析器中,添加一个参数叫做flavor=‘bs4’。

关于“Python如何实现读取HTML表格?如何解决pd.read_html()读取数据不完整?”的内容讲解到这就结束了,希望通过以上内容的学习对你会有一定的帮助。

【原创声明】凡注明“来源:优草派”的文章,系本站原创,任何单位或个人未经本站书面授权不得转载、链接、转贴或以其他方式复制发表。否则,本站将依法追究其法律责任。