Я получил html следующим образом:
<table cellspacing="0" class="tbOdpis" width="100%">
<td class="csTytul" colspan="100" width="100%">Rubryka 0.1 - Informacje podstawowe</td><td class="csTBreak" colspan="100" width="100%">
-
</td><td class="csCOpis" colspan="45" width="45%">Numer i nazwa pola</td><td class="csCOpis" colspan="55" width="55%">Treść pola</td><td class="csBOpis" colspan="4" width="4%">1.</td><td class="csBOpis" colspan="41" width="41%">Numer księgi</td><td class="csBDDane" colspan="55" width="55%">xxx / 000xxxxxx / x</td><td class="csBreak" colspan="100" width="100%">
-
</td><td class="csOpis" colspan="4" rowspan="6" style="vertical-align:top;" width="4%">2.</td><td class="csOpis" colspan="41" width="41%">Oznaczenie wydziału</td><td class="csOpis" colspan="55" width="55%">---</td><td class="csOpis" colspan="41" width="41%">A: nazwa sądu</td><td class="csBDane" colspan="55" width="55%">xxxxxxxxxxxxxxx</td><td class="csOpis" colspan="41" width="41%">B: siedziba sądu</td><td class="csBDane" colspan="55" width="55%">xxxx</td><td class="csOpis" colspan="41" width="41%">C: kod wydziału</td><td class="csBDane" colspan="55" width="55%">xxxx</td><td class="csOpis" colspan="41" width="41%">D: numer wydziału</td><td class="csBDane" colspan="55" width="55%">III</td><td class="csOpis" colspan="41" width="41%">E: nazwa wydziału</td><td class="csBDane" colspan="55" width="55%">WYDZIAŁ KSIĄG WIECZYSTYCH</td><td class="csTBreak" colspan="100" width="100%">
-
</td><td class="csCOpis" colspan="45" width="45%">Numer i nazwa pola</td><td class="csCMOpis" colspan="10" width="10%">Indeks zmiany</td><td class="csCOpis" colspan="45" width="45%">Treść pola</td><td class="csOpis" colspan="4" width="4%">3.</td><td class="csOpis" colspan="41" width="41%">Typ księgi</td><td class="csDane" colspan="10" width="10%">---</td><td class="csDane" colspan="45" width="45%">LOKAL STANOWIĄCY ODRĘBNĄ NIERUCHOMOŚĆ</td>
<td class="csEmptyLine" colspan="100" width="100%"></td><td class="csTytul" colspan="100" width="100%">Rubryka 0.2 - Dane o założeniu księgi wieczystej</td><td class="csTBreak" colspan="100" width="100%">
-
</td><td class="csCOpis" colspan="45" width="45%">Numer i nazwa pola</td><td class="csCMOpis" colspan="10" width="10%">Indeks zmiany</td><td class="csCOpis" colspan="45" width="45%">Treść pola</td><td class="csOpis" colspan="4" width="4%">1.</td><td class="csOpis" colspan="41" width="41%">Stan w czasie założenia</td><td class="csDane" colspan="10" width="10%">---</td><td class="csDane" colspan="45" width="45%">ZAŁOŻENIE KSIĘGI WIECZYSTEJ W WYNIKU WYODRĘBNIENIA LOKALU</td><td class="csOpis" colspan="4" width="4%">2.</td><td class="csOpis" colspan="41" width="41%">Chwila zapisania księgi</td><td class="csOpis" colspan="10" width="10%">---</td><td class="csDane" colspan="45" width="45%">xxxxx xxxxx xxxxx</td><td class="csOpis" colspan="4" width="4%">3.</td><td class="csOpis" colspan="41" width="41%">Chwila ujawnienia księgi</td><td class="csOpis" colspan="10" width="10%">---</td><td class="csDane" colspan="45" width="45%">xxxxx xxxxx xxxxx</td><td class="csOpis" colspan="4" width="4%">4.</td><td class="csOpis" colspan="41" width="41%">Data założenia dotychczasowej księgi wieczystej</td><td class="csDane" colspan="10" width="10%">---</td><td class="csDane" colspan="45" width="45%">xxxxx xxxxx xxxxx</td>
<td class="csEmptyLine" colspan="100" width="100%"></td><td class="csTytul" colspan="100" width="100%">Rubryka 0.3 - Dane o zamknięciu księgi wieczystej</td><td class="csTBreak" colspan="100" width="100%">
-
</td><td class="csCOpis" colspan="45" width="45%">Numer i nazwa pola</td><td class="csCMOpis" colspan="10" width="10%">Indeks zmiany</td><td class="csCOpis" colspan="45" width="45%">Treść pola</td><td class="csOpis" colspan="4" width="4%">1.</td><td class="csOpis" colspan="41" width="41%">Chwila zamknięcia księgi</td><td class="csDane" colspan="10" width="10%">---</td><td class="csDane" colspan="45" width="45%">---</td><td class="csOpis" colspan="4" width="4%">2.</td><td class="csOpis" colspan="41" width="41%">Podstawa zamknięcia księgi</td><td class="csDane" colspan="10" width="10%">---</td><td class="csDane" colspan="45" width="45%">---</td>
</table>
Я пытаюсь разобрать эту таблицу.Ранее в этой таблице также были строки, помеченные 'tr', и я использовал следующий код:
def table_to_2d(table_tag):
rowspans = [] # track pending rowspans
rows = table_tag.find_all('tr')
colcount = 0
for r, row in enumerate(rows):
cells = row.find_all(['td', 'th'], recursive=False)
colcount = max(
colcount,
sum(int(c.get('colspan', 1)) or 1 for c in cells[:-1]) + len(cells[-1:]) + len(rowspans))
rowspans += [int(c.get('rowspan', 1)) or len(rows) - r for c in cells]
rowspans = [s - 1 for s in rowspans if s > 1]
table = [[None] * colcount for row in rows]
rowspans = {} # track pending rowspans, column number mapping to count
for row, row_elem in enumerate(rows):
span_offset = 0 # how many columns are skipped due to row and colspans
for col, cell in enumerate(row_elem.find_all(['td', 'th'], recursive=False)):
col += span_offset
while rowspans.get(col, 0):
span_offset += 1
col += 1
rowspan = rowspans[col] = int(cell.get('rowspan', 1)) or len(rows) - row
colspan = int(cell.get('colspan', 1)) or colcount - col
span_offset += colspan - 1
value = cell.get_text()
for drow, dcol in product(range(rowspan), range(colspan)):
try:
table[row + drow][col + dcol] = value
rowspans[col + dcol] = rowspan
except IndexError:
pass
rowspans = {c: s - 1 for c, s in rowspans.items() if s > 1}
return table
, и все прошло гладко.В настоящее время разработчики изменили форму, показанную выше, то есть без маркера строки.
Как улучшить код для правильного анализа новой формы?