Красивый суп - как получить href - PullRequest
3 голосов
/ 12 сентября 2011

Мне кажется, что я не могу извлечь href (на странице есть только один <strong>Website:</strong>) из следующего супа html:

<div id='id_Website'>
<strong>Website:</strong> 
<a href='http://google.com' target='_blank' rel='nofollow'>www.google.com</a>
</div></div><div>

Это то, что я думал, должно работать

href = soup.find("strong" ,text=re.compile(r'Website')).next["href"]

1 Ответ

2 голосов
/ 12 сентября 2011

.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>.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...