Прежде всего, я думаю, что вы получаете сообщение об ошибке, потому что .children
будет также содержать разделители строк, такие как '\ n', которые будут обрабатываться как bs4.element.NavigableString.
Если вы будете рассматривать это как тег, вы будете наиболее вероятно получить AttributeError:
import bs4
from bs4 import BeautifulSoup
html="""
<table>
<tr><td>1 EUR</td><td>4,2989</td></tr>
<tr><td>1 USD</td><td>3,7575</td></tr>
<tr><td>1 CHF</td><td>3,8245</td></tr>
<tr><td>1 GBP</td><td>4,7907</td></tr>
<tr><td>100 JPY</td><td>3,4727</td></tr>
</table>
"""
soup=BeautifulSoup(html,'html.parser')
table=soup.find('table')
for child in table.children:
print(repr(child))
выход
'\n'
<tr><td>1 EUR</td><td>4,2989</td></tr>
'\n'
<tr><td>1 USD</td><td>3,7575</td></tr>
'\n'
<tr><td>1 CHF</td><td>3,8245</td></tr>
'\n'
<tr><td>1 GBP</td><td>4,7907</td></tr>
'\n'
<tr><td>100 JPY</td><td>3,4727</td></tr>
'\n'
Одним из решений было бы получение только тех процессов, которые не являются NavigableString.
import bs4
from bs4 import BeautifulSoup
html="""
<table>
<tr><td>1 EUR</td><td>4,2989</td></tr>
<tr><td>1 USD</td><td>3,7575</td></tr>
<tr><td>1 CHF</td><td>3,8245</td></tr>
<tr><td>1 GBP</td><td>4,7907</td></tr>
<tr><td>100 JPY</td><td>3,4727</td></tr>
</table>
"""
soup=BeautifulSoup(html,'html.parser')
table=soup.find('table')
for child in table.children:
if type(child) is not bs4.element.NavigableString:
print(child.findAll('td')[1].text)
Выход:
4,2989
3,7575
3,8245
4,7907
3,4727