Beautifulsoup 无法通过文本找到标签

Mil*_*ano 4 python beautifulsoup web-scraping

Beautifulsoup 突然无法通过文本找到标签。

我有一个 html,其中出现此标签:

<span class="date">Telefon: <b>+421 902 808 344</b></span>
Run Code Online (Sandbox Code Playgroud)

BS4 找不到此标签:

telephone = soup.find('span',{'text':re.compile('.*Telefon.*')})
print telephone

>>> None
Run Code Online (Sandbox Code Playgroud)

我尝试过很多方法,比如

find('span',text='Telefon: ')或者 find('span', text=re.compile('Telefon: .*')

但没有任何效果。我已经尝试过更改html.parserlxml.

可能出了什么问题?

unu*_*tbu 5

BeautifulSoup 将字符串视为Telefon:标签bs4.element.NavigableString内部span。所以你可以找到它

import bs4
import re

soup = bs4.BeautifulSoup('<span class="date">Telefon: <b>+421 902 808 344</b></span>')
for span in soup.find_all('span', {'class':"date"}):
    if span.find(text=re.compile('Telefon:')):
        for text in span.stripped_strings:
            print(text)
# Telefon:
# +421 902 808 344
Run Code Online (Sandbox Code Playgroud)

或者,您可以直接使用 lxml:

import lxml.html as LH

root = LH.fromstring('<span class="date">Telefon: <b>+421 902 808 344</b></span>')

for span in root.xpath('//span[@class="date" and contains(text(), "Telefon:")]'):
    print(span.text_content())
    # Telefon: +421 902 808 344
Run Code Online (Sandbox Code Playgroud)