簡體   English   中英

美麗湯中的正則表達式不起作用

[英]Regular expressions in Beautiful soup don't work

我正在尋找一個標簽。 該標簽的類包含以下子字符串: borderbox flightbox p2

例如: <div class="borderbox flightbox p2 my-repeat-animation ng-scope"...

因此,我認為這應該可行:

soup.find_all('div',class_=re.compile(r"borderbox flightbox p2"+".*"))

但是找不到任何東西。 您有什么建議嗎?

BeautifulSoup相當於re.search() ,而不是re.match()

嘗試

soup.find_all('div', class_=re.compile('borderbox flightbox p2 \d+'))

這應該做您想要的:

def match_tag(tag, classes):
    return (tag.name == 'div'
            and 'class' in tag.attrs
            and all([c in tag['class'] for c in classes]))

divs = soup.find_all(lambda t: match_tag(t, ['borderbox', 'flightbox', 'p2'))

在BeautifulSoup 4中,傳遞給class_參數的正則表達式分別應用於每個CSS類。 BeautifulSoup正在檢查div持有的每個CSS類,以查看它是否與您提供的正則表達式匹配。 要將其放入代碼中,它正在執行以下操作:

for class in div['class']:
    if regexp.search(class): yield div

當然,您所擁有的任何類都不會匹配您的正則表達式; 'borderbox flightbox p2'在無處找到'borderbox' 'flightbox' ,或'p2'

解決方案是利用BeautifulSoup的功能來為您進行匹配。 match_tag檢查是否(1)標簽是div ,(2)標簽具有參數classes指定的每個CSS classes

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM