Проблема заключается в том, что ваши теги имеют вложенные теги, а текст, который вы ищете, находится внутри такого тега (p
здесь).
Итак, самый простой подход - использовать лямбда внутри .find()
, чтобы проверить имена тегов, и если свойство .text
содержит ваш шаблон. Здесь вам даже не нужно регулярное выражение:
>>> tag = soup.find(lambda t: t.name in ['li','div','p','em'] and '4BDB1CD96' in t.text)
>>> tag
<p><em>code of Drink<br/></em>
Budweiser: 4BDB1CD96<br/>
price: 10$</p>
>>> tag.string
>>> tag.text
'code of Drink\nBudweiser: 4BDB1CD96\nprice: 10$'
Конечно, вы можете использовать регулярное выражение для более сложных поисков:
r = re.compile('4BDB1CD96') # or whatever the pattern is
tag = soup.find(lambda t: t.name in ['li','div','p','em'] and r.search(t.text))