當前位置:成語大全網 - 書法字典 - Python實現了簡單的HTML表格解析。

Python實現了簡單的HTML表格解析。

本文描述了用Python實現簡單的HTML表格解析的方法。分享給大家,供大家參考。具體分析如下:

這裏依賴libxml2dom,確保先安裝!導入到您的足跡中,並調用parse_tables()函數。

1.source =包含源代碼的字符串,可以只傳入表格或整個頁面代碼

2.headers =壹個整型列表或壹個字符串列表

如果標題是整數,這是針對沒有標題的表,只需列出要從中提取數據的行的基於0的索引。

如果標題是字符串,這適用於帶有標題列(帶有標簽)的表格,它將從指定的列中提取信息

3.源代碼中表的從0開始的索引。如果有多個表,並且要解析的表是代碼中的第三個表,那麽在這裏傳入數字2

它將返回壹個列表列表。每個內部列表將包含解析後的信息。

具體代碼如下:

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

四十二個

43

四十四

45

46

47

48

四十九個

50

51

五十二個

53

54

55

五十六歲

57

58

59

60

61

62

63

64

65

66

67

六十八

六十九

70

71

七十二個

73

74

75

76

77

七十八

79

80

81

82

83

84

八十五

86

87

88

八十九

90

91

92

93

94

95

96

97

98

99

100

101

102

103

104

105

106

107

108

109

110

111

112

113

114

115

116

117

118 #表解析器的目標是從特定的

#表格中的列數。

#Input:來自典型網站的源代碼

#Arguments:用戶想要返回的標題列表

#Output:每行中的數據列表的列表

導入libxml2dom

def parse_tables(源、頭、表索引):

parse_tables(字符串源、列表頭、table_index)

如果表格定義了標題,則標題可以是字符串列表,或者

頭可以是壹個整數列表,如果沒有定義頭,這將得到數據

從行索引中。

這個方法返回壹個列表列表

#確定標題列表是字符串還是整型,並確保它們

#都是同壹類型

j = 0

打印打印標題:,標題

#轉到正確的功能

#如果標題類型是int

if type(headers[0])= = type(1):

#運行no_header函數

返回no_header(源,標題,表索引)

#如果標題類型是字符串

elif類型(標題[0]) ==類型(a):

#運行header_given函數

返回header_given(源,頭,表索引)

否則:

#如果標題不正確,則返回none

不返回

#這個函數從整個頁面的源代碼中獲取壹個字符串列表

#頁眉和頁面上表格的索引號。它返回壹個列表

#包含抓取信息的列表

def header_given(源,標題,表索引):

#啟動列表以保留返回列表

return_list = []

#啟動壹個列表來保存行中數據的索引號

header_index = []

#從源代碼中獲取壹個文檔對象

doc = libxml 2 DOM . parse string(source,html=1)

#從文檔中獲取表格

tables = doc . getelementsbytagname(table)

嘗試:

#嘗試將焦點放在所需的表上

main_table =表[table_index]

除了:

#如果表格不存在,則返回壹個錯誤

return[未找到表索引]

#獲取表格中的標題列表

table _ headers = main _ table . getelementsbytagname(th)

#需要標頭循環的哨兵值

loop_sentry = 0

#遍歷每個標題,查找匹配項

對於table_headers中的標題:

#如果標題在所需標題列表中

if header . text標題中的內容:

#將其添加到header_index

header _ index . append(loop _ sentry)

#給loop_sentry加壹個

loop_sentry+=1

#從表中獲取行

rows = main _ table . getelementsbytagname(tr)

#sentry值檢測第壹行是否被查看

row_sentry = 0

#遍歷表格中的行,跳過第壹行

對於行中的行:

#如果row_sentry為0,這是我們的第壹行

如果row_sentry == 0:

#使row_sentry不為0

row_sentry = 1337

繼續

#從當前行獲取所有單元格

cells = row . getelementsbytagname(TD)

#啟動壹個列表以追加到return_list中

cell_list = []

#遍歷所有標題索引

對於i in header_index:

#將單元格文本內容追加到cell_list

cell_list.append(cells[i].文本內容)

#將單元格列表追加到返回列表

return_list.append(單元格列表)

#return返回列表

return返回_列表

#這個函數接收整個頁面的源代碼,壹個int列表

#頭,指示所需項目的索引號和索引號

頁面上表格的編號。它返回壹個包含抓取信息的列表列表

定義no_header(source,headers,table_index):

#啟動壹個列表來保存返回列表

return_list = []

#從源代碼中獲取壹個文檔對象

doc = libxml 2 DOM . parse string(source,html=1)

#從文檔中獲取表格

tables = doc . getelementsbytagname(table)

嘗試:

#嘗試將焦點放在想要的桌子上

main_table =表[table_index]

除了:

#如果表格不存在,則返回壹個錯誤

return[未找到表索引]

#獲取main_table中的所有行

rows = main _ table . getelementsbytagname(tr)

#遍歷每壹行

對於行中的行:

#從當前行獲取所有單元格

cells = row . getelementsbytagname(TD)

#啟動壹個列表以追加到return_list中

cell_list = []

#遍歷所需標題的列表

對於標題中的I:

嘗試:

#嘗試將文本從單元格添加到cell_list中

cell_list.append(cells[i].文本內容)

除了:

#如果有錯誤,通常是索引錯誤,請繼續

繼續

#追加刮入return_list的數據

return_list.append(單元格列表)

#返回返回列表

return返回_列表

希望這篇文章對妳的Python編程有所幫助。