Я пытаюсь создать код, который преобразует файл .html
в файл .csv
.
Я написал код, который работает, если html-файл содержит только 1 таблицу .
from bs4 import BeautifulSoup
import csv
html = open("table.html").read()
soup = BeautifulSoup(html)
table = soup.find("table")
output_rows = []
for table_row in table.findAll('tr'):
columns = table_row.findAll('td')
output_row = []
for column in columns:
output_row.append(column.text)
output_rows.append(output_row)
print(output_rows)
with open('output.csv', 'a') as csvfile:
writer = csv.writer(csvfile)
writer.writerows(output_rows)
Для проверки, работает ли она отлично, я пишу выходные строки.Этот код показывает их отлично;[['Data 1', 'Data 2', 'Data 3'], ['Hello', 'World', 'Wicaledon']]
И файл table.html
выглядит следующим образом:
<table>
<tr>
<td>Data 1</td>
<td>Data 2</td>
<td>Data 3</td>
</tr>
<tr>
<td>Hello</td>
<td>World</td>
<td>Wicaledon</td>
</tr>
</table>
Но проблема в том; Если я использую файл table.html
, который содержит 2стол как этот;
<html>
<head>
<title>Test Table</title>
</head>
<body>
<h2>First Table</h2>
<table>
<tr>
<td>A</td>
<td>B</td>
</tr>
<tr>
<td>C</td>
<td>D</td>
</tr>
<tr>
<td>E</td>
<td>F</td>
</tr>
<tr>
<td>G</td>
<td>H</td>
</tr>
</table>
<h2>Second Table</h2>
<table>
<tr>
<td>1</td>
<td>2</td>
<td>3</td>
<td>4</td>
<td>5</td>
<td>6</td>
</tr>
<tr>
<td>2</td>
<td>3</td>
<td>4</td>
<td>5</td>
<td>6</td>
<td>7</td>
</tr>
<tr>
<td>3</td>
<td>4</td>
<td>5</td>
<td>6</td>
<td>7</td>
<td>8</td>
</tr>
<tr>
<td>4</td>
<td>5</td>
<td>6</td>
<td>7</td>
<td>8</td>
<td>9</td>
</tr>
<tr>
<td>5</td>
<td>6</td>
<td>7</td>
<td>8</td>
<td>9</td>
<td>10</td>
</tr>
<tr>
<td>6</td>
<td>7</td>
<td>8</td>
<td>9</td>
<td>10</td>
<td>11</td>
</tr>
</table>
</table>
</body>
</html>
Он записывает выходные строки следующим образом;[['A', 'B'], ['C', 'D'], ['E', 'F'], ['G', 'H']]
И CSV-файл содержит только эти массивы.
Истинный вывод должен быть таким:
[['A', 'B'], ['C', 'D'], ['E', 'F'], ['G', 'H']]
[['1', '2', '3', '4', '5', '6'],
['2', '3', '4', '5', '6', '7'],
['3', '4', '5', '6', '7', '8'],
['4', '5', '6', '7', '8', '9'],
['5', '6', '7', '8', '9', '10'],
['6', '7', '8', '9', '10', '11']]
И эти 2 массива должны быть записаны в CSV-файл.
Как я могу исправить свой код, используя BeautifulSoup и CSV-модули