У меня есть следующая таблица HTML:
<table>
<thead>
<th> X1 </th>
<th> X2 </th>
</thead>
<tbody>
<tr>
<td>Test</td>
<td><span style = "..."> Test2 </span> </td>
</tr>
</tbody>
</table>
который я хотел бы проанализировать в фрейме данных, используя pd.read_html(). Результат выглядит следующим образом:
Однако я бы предпочел следующий вывод (сохранение элементов HTML в ячейке):
Возможно ли это с помощью pd.read_html()?
Я не смог найти решение в документации read_html(), и альтернативой был бы ручной разбор.






Вы можете изменить ._text_getter(), если хотите.
Что-то вроде:
import lxml.html
import pandas as pd
html = """
<table>
<thead>
<th> X1 </th>
<th> X2 </th>
</thead>
<tbody>
<tr>
<td>Test</td>
<td><span style = "..."> Test2 </span> </td>
</tr>
</tbody>
</table>
"""
def custom_text_getter(self, obj):
result = obj.xpath("node()")[0]
if isinstance(result, lxml.html.HtmlElement):
result = lxml.html.tostring(result, encoding = "unicode")
return result
pd.io.html._LxmlFrameParser._text_getter = custom_text_getter
print(
pd.read_html(html)[0]
)
X1 X2
0 Test <span style = "..."> Test2 </span>
Я не знаю, что только с
pd.read_htmlвы могли бы сделать это. Вы должны разобрать его вручную (например, с помощьюbeautifulsoup).