Python實(shí)現(xiàn)讀取HTML表格 pd.read_html()
Python讀取HTML表格
數(shù)據(jù)部門提供的數(shù)據(jù)是xls格式的文件,但是執(zhí)行讀取xls文件的腳本報(bào)錯(cuò)。
xlrd報(bào)錯(cuò):
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 # 二維數(shù)組原因是文件格式是HTML表格,參考python xlrd unsupported format, or corrupt file.
使用pandas的read_html讀取文件,同時(shí)替換nan為空字符,數(shù)據(jù)格式保持一致。
def read_html_table(file_path): ? ? """ ? ? 讀取html表格 ? ? """ ? ? import pandas as pd ? ? pd_table = pd.read_html(file_path) ? ? df = pd_table[0] ? ? # num_col = df.shape[1] ? ? # num_row = df.shape[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): ? ? ? ? ? ? # 判斷nan,參考https://stackoverflow.com/questions/944700/how-can-i-check-for-nan-values ? ? ? ? ? ? if value != value: ? ? ? ? ? ? ? ? df_data[r_idx][c_idx] = "" ? ? return df_data
讀取問(wèn)題解決。
pd.read_html讀取數(shù)據(jù)不完整問(wèn)題
問(wèn)題:有一個(gè)較大的表格數(shù)據(jù)存在了html中,打算用read_html直接取出來(lái)這部分?jǐn)?shù)據(jù),但后來(lái)發(fā)現(xiàn)read_html讀取的數(shù)據(jù)不完整,后來(lái)檢查html的table都沒有任何問(wèn)題
解決辦法
pd.read_html的默認(rèn)解析器為 'lxml' ,添加參數(shù)flavor='bs4'便可解決
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
詳解Python中range()與xrange()的區(qū)別
range()?和?xrange()?是兩個(gè)函數(shù),可用于在?Python的?for?循環(huán)中迭代一定次數(shù)。本文將通過(guò)示例詳細(xì)說(shuō)說(shuō)二者的區(qū)別與使用,需要的可以參考一下2022-09-09
Python中def()函數(shù)的實(shí)戰(zhàn)練習(xí)題
def是define的縮寫,用來(lái)自定義函數(shù),下面這篇文章主要給大家介紹了關(guān)于Python中def()函數(shù)的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),需要的朋友可以參考下2022-07-07
python簡(jiǎn)單實(shí)現(xiàn)獲取當(dāng)前時(shí)間
最近項(xiàng)目中經(jīng)常需要python去取當(dāng)前的時(shí)間,雖然不是很難,但是老是忘記,用一次丟一次,為了能夠更好的記住,我今天特意寫下python 當(dāng)前時(shí)間這篇文章,如果你覺的對(duì)你有用的話,可以收藏下。2016-08-08
python實(shí)現(xiàn)網(wǎng)站用戶名密碼自動(dòng)登錄功能
最近接到這樣的需求通過(guò)網(wǎng)頁(yè)用戶認(rèn)證登錄實(shí)現(xiàn)上網(wǎng),如何實(shí)現(xiàn)網(wǎng)站自動(dòng)登錄功能呢,接下來(lái)小編給大家?guī)?lái)了python實(shí)現(xiàn)網(wǎng)站用戶名密碼自動(dòng)登錄功能,需要的朋友可以參考下2019-08-08
Python可視化學(xué)習(xí)之seaborn調(diào)色盤
seaborn是在matplotlib基礎(chǔ)上封裝的,所以matplotlib的調(diào)色盤seaborn都可以使用。本文系統(tǒng)介紹seaborn調(diào)色盤,相較于matplotlib,有諸多不同,需要的可以參考一下2022-02-02
pytorch 在網(wǎng)絡(luò)中添加可訓(xùn)練參數(shù),修改預(yù)訓(xùn)練權(quán)重文件的方法
今天小編就為大家分享一篇pytorch 在網(wǎng)絡(luò)中添加可訓(xùn)練參數(shù),修改預(yù)訓(xùn)練權(quán)重文件的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2019-08-08

