我正在尝试寻找标签。该标签的类包含以下子字符串:borderbox Flightbox p2。
例如:<div class="borderbox flightbox p2 my-repeat-animation ng-scope"...
所以我认为这应该有效:
soup.find_all('div',class_=re.compile(r"borderbox flightbox p2"+".*"))
但它找不到任何东西。您有什么建议吗?
最佳答案
这应该可以满足您的要求:
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 类.
关于python - Beautiful soup 中的正则表达式不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30927925/