[英]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.