Я пытаюсь извлечь строки из HTML-таблицы и добавить их в DataFrame или непосредственно в электронную таблицу Excel.
Я хочу сохранить исходную структуру таблицы, поскольку она отображает физическую структуру матричной системы. Например, данные, которые я пытаюсь извлечь, следуют этой форме.
<div id="FA_DSC"><p>Table_Title</p><table border="1" cellpadding="4"style="border: 1px solid #000000; border-collapse: collapse;">
<tr>
<td> </td>
<td> </td>
<td>X68</td>
<td>X20</td>
<td>X17</td>
<td> </td>
<td> </td>
</tr>
<tr>
<td> </td>
<td>X80</td>
<td>X84</td>
<td>V28</td>
<td>X02</td>
<td>X12</td>
<td> </td>
</tr>
<tr>
<td>X22</td>
<td>X55</td>
<td>V57</td>
<td>U15</td>
<td>V29</td>
<td>X51</td>
<td>X40</td>
</tr>
</table></div>
Я хотел бы взять один
и вставить его в лист Excel / фрейм данных, чтобы он мог следовать этому формату,
Table_Title
X68 X20 X17
X80 X84 V28 X02 X12
X22 X55 V57 U15 V29 X51 X40
Используя BeautifulSoup, я смог найти все таблицы, которые я хочу извлечь, используя следующую команду:
with open(r'D:\yolo\frolo\dolo.html','r') as f:
contents = f.read()
soup = BeautifulSoup(contents.encode("UTF8"),'lxml')
table = soup.find_all('div',{'id':'table'})
Отсюда я попытался извлечь все, что находится между
, но яне зная, как это сделать при сохранении целостности строк.
Например, я пробовал
for i in table:
for k in i:
text = i.get_text().split('\n')
print(text)
, но будет возвращать итерации, подобные этой.
['Table_Title']
['', '', ' ', ' ', 'X68', 'X20', 'X17', ' ', ' ',
'', '', ' ', 'X80', 'X84', 'V28', 'X02', 'X12', ' ',
'', '', 'X22', 'X55', 'V57', 'U15', 'V29', 'X51', 'X40',
'', '', 'X14', 'W05', 'T34', 'U36', 'T38', 'S75', 'X24',
'', '', 'X83', 'X57', 'U48', 'V10', 'T82', 'X04', 'X11',
'', '', ' ', 'X82', 'X59', 'T39', 'X03', 'X18', ' ', '',
'', ' ', ' ', 'X78', 'X15', 'X41', ' ', ' ', '', '']
Я также пытался,
table.find_all('td')
Что возвращает,
AttributeError: ResultSet object has no attribute 'find_all'.
You're probably treating a list of items like a single item.
Did you call find_all() when you meant to call find()?
Самое близкое, что я получил, это получение данных в списке с помощью
k.contents
Когда я пытаюсь использовать регулярные выражения
print(re.findall("<tr>(.*?)</tr>", "".join(k.contents)))
, я получаю это
TypeError: sequence item 1: expected str instance, Tag found
Итак, это мой исходный код, и я надеялся получить некоторые рекомендации о том, как перейти отздесь.
with open(r'D:\yolo\frolo\dolo.html','r') as f:
contents = f.read()
soup = BeautifulSoup(contents.encode("UTF8"),'lxml')
table = soup.find_all('div',{'id':'table'})
Я новичок в BeautifulSoup и HTML и надеялсякто-то может помочь извлечь эти строки. Есть ли в BeautifulSoup функция, которую я могу использовать для извлечения строки за строкой?
Надеюсь, я четко об этом сообщил и прошу прощения за длинный пост. просто пытаюсь предоставить всем достаточно информации, чтобы помочь мне решить проблему.