Пример HTML ('x.html' во фрагменте Python):
<table>
<tr>
<td>a</td>
<td>b</td>
<table><tr><td>c</td></tr></table>
</tr>
</table>
Я хочу получить список из трех столбцов из одной строки таблицы:
[
'<td>a</td>',
'<td>b</td>',
'<table><tr><td>c</td></tr></table>'
]
Я пытался просто перебрать объект BeautifulSoup
, но он возвращает весь HTML и пустую (ну, '\n'
) строку.
In [9]: soup = BeautifulSoup(open('x.html').read(), 'html.parser')
In [10]: for a in soup:
...: print(type(a))
...:
<class 'bs4.element.Tag'>
<class 'bs4.element.NavigableString'>
Я также пытался использовать метод find_all()
, но он находит вложенный <td>c</td>
, который я не хочу видеть в результатах:
In [24]: len(soup.find_all('td'))
Out[24]: 4 # <-- I need 3 things, not 4
Я думал, что параметр find / find_all recursive
касается вложенных элементов, но я не понимаю, работает ли он вообще:
Signature: soup.find_all(name=None, attrs={}, recursive=True, text=None, limit=None, **kwargs)
In [26]: len(soup.find_all('td', recursive=False))
Out[26]: 0
Может, написание xml.sax
парсера будет проще?