こちらのサンプルを利用しました
http://programming-study.com/technology/html-rowspan/
python
1from bs4 import BeautifulSoup
2import pprint
3
4html = '''
5<table border="1">
6 <tr>
7 <th>ホット/コールド</th>
8 <th>種類</th>
9 <th>サイズ</th>
10 <th>価格(円)</th>
11 </tr>
12 <tr>
13 <th rowspan="2">ホット</th>
14 <td>コーヒー</td>
15 <td>S,M</td>
16 <td>150,200</td>
17 </tr>
18 <tr>
19 <!-- 上のセルと結合して消えるセル -->
20 <td>紅茶</td>
21 <td>Sサイズのみ</td>
22 <td>170</td>
23 </tr>
24 <tr>
25 <th>コールド</th>
26 <td>コーラ</td>
27 <td colspan="2">検討中</td>
28 <!-- 左のセルと結合して消えるセル -->
29 </tr>
30</table>
31'''
32
33soup = BeautifulSoup(html, 'html.parser')
34
35data = []
36span = []
37
38# リスト作成
39for y, trs in enumerate(soup.select('table > tr')):
40
41 temp = []
42
43 for x, td in enumerate(trs.find_all(['th', 'td'])):
44
45 cell = td.get_text(strip=True)
46 temp.append(cell)
47
48 # spanリスト作成
49 rowspan = td.get('rowspan')
50 colspan = td.get('colspan')
51
52 if rowspan or colspan:
53 span.append({
54 'x': x,
55 'y': y,
56 'row': int(rowspan) if rowspan else 0,
57 'col': int(colspan) if colspan else 0,
58 'data': cell
59 })
60
61 data.append(temp)
62
63# リスト確認
64pprint.pprint(data)
65print('-' * 20)
66
67# spanリスト確認
68pprint.pprint(span)
69print('-' * 20)
70
71# 行の最大値
72row_max = len(data)
73
74# リストに挿入
75for i in span[::-1]:
76
77 # rowspan
78 if i['row'] > 1 and (i['y'] + i['row']) <= row_max:
79 for n in range(1, i['row']):
80
81 data[i['y'] + n].insert(i['x'], None)
82 # data[i['y'] + n].insert(i['x'], i['data'])
83
84 # colspan
85 if i['col'] > 1:
86 for n in range(1, i['col']):
87
88 data[i['y']].insert(i['x'] + n, None)
89 # data[i['y']].insert(i['x'] + n, i['data'])
90
91# リスト確認
92pprint.pprint(data)
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。