.next
в данном случае - NavigableString
, содержащий пробел между тегом <strong>
и тегом <a>
. Кроме того, атрибут text=
предназначен для сопоставления NavigableString
с, а не элементов.
Следующее делает то, что вы хотите, я думаю:
import re
from BeautifulSoup import BeautifulSoup
html = '''<div id='id_Website'>
<strong>Website:</strong>
<a href='http://google.com' target='_blank' rel='nofollow'>www.google.com</a>
</div></div><div>'''
soup = BeautifulSoup(html)
for t in soup.findAll(text=re.compile(r'Website:')):
# Find the parent of the NavigableString, and see
# whether that's a <strong>:
s = t.parent
if s.name == 'strong':
print s.nextSibling.nextSibling['href']
... но это не очень надежно. Если вмещающий div
имеет предсказуемый идентификатор, то лучше найти его, а затем найти в нем первый элемент <a>
.