2015-10-13 3 views
1

Я пытаюсь найти тег <a> на веб-странице по прилагаемому тексту, используя BeautifulSoup 4 в Python. Я использую реальное выражение, как показано в следующем примере:BeautifulSoup: поиск текста тега со встроенным тегом

>>> from bs4 import BeautifulSoup as BS 
soup = BS('<a>lalala <del>10</del> lalala </a>') 
soup1 = BS('<a>lalala 10 lalala </a>' 
>>> soup.find_all('a', text=re.compile('lalala')) 
[] 
>>> soup1.find_all('a', text=re.compile('lalala')) 
[<a>lalala 10 lalala </a>] 

Почему встроенный <del></del> тег держит меня от поиска <a> тег, текст которой содержит его? И как я могу это исправить?

+0

** Совет: ** Вы забыли 'импортную re' в вашем примере :) –

+0

Хорошо играл ;-) – user3230304

ответ

1

Это не имеет ничего общего с регулярным выражением, но тем, как .string (text аргумент называется string в в Beautiful Soup 4.4.0) аргумент работ, является то, что он не вернется Нет, если тег содержит более чем одну вещь. Вы можете использовать a function сделать это:

def in_text(tag): 
    return tag.name == 'a' and 'lalala' in tag.text 

soup.find_all(in_text) 

Что дает:

[<a>lalala <del>10</del> lalala </a>] 
Смежные вопросы