Вы не описали, что означает "don't work"
.
Может быть, у вас есть другой <tr>
без data-id
и используя только find('tr')
, вы получите этот элемент, и когда вы попытаетесь получить ['data-id']
, он не сможет его найти.
Но вы можете использовать find('tr', {'data-id': True})
или find_all('tr', {'data-id': True})
, чтобы получить только элементы, которые имеют data-id
В примере я добавил <tr>
без data-id
в качестве первого элемента, чтобы показать, что это может привести к ошибке.
text = '''
<tr></tr>
<tr data-id="455"></tr>
<tr data-id="456"></tr>
'''
from bs4 import BeautifulSoup
soup = BeautifulSoup(text, 'html.parser')
#for tr in soup.find_all('tr', {'data-id': True}):
# print(tr['data-id'])
print("--- with {'data-id': True} ---")
print('html :', soup.find('tr', {'data-id': True}))
print('data-id:', soup.find('tr', {'data-id': True})['data-id'])
print("--- without {'data-id': True} ---")
print('html :', soup.find('tr'))
print('data-id:', soup.find('tr')['data-id'])
Результат:
--- with {'data-id': True} ---
html : <tr data-id="455"></tr>
data-id: 455
--- without {'data-id': True} ---
html : <tr></tr>
Traceback (most recent call last):
...
KeyError: 'data-id'