例如:我想找到带有类"作者"(soup.findall(class_='author')
)的元素的内容,但跳过使用类"注释"(({{1} }})。
所以上课"作者"但不在任何带有类"注释"
的元素中是否可以在bs中执行此类操作?
示例html:
soup.findall(class_='comments')
答案 0 :(得分:0)
def AuthorNotInComments(tag):
c = tag.get('class')
if not c:
return False
if 'author' in c:
if tag.findParents(class_='comments'):
return False
return True
soup.findAll(AuthorNotInComments)
或"不区分大小写包含"版本:
def AuthorNotInComments(tag):
c=tag.get('class')
if not c:
return False
p=re.compile('author', re.IGNORECASE)
str = " ".join(c)
if p.match(str) and not tag.findParents(class_=re.compile('comments'),
re.IGNORECASE):
return True
return False
soup.findAll(AuthorNotInComments)
我欢迎代码中的任何建议/清理等。如果有人想出如何使其可重复使用会很棒 - 例如findAll(class_="test", not_under="junk")
答案 1 :(得分:-1)
我认为一种方法是使用for循环和if语句来使用.parent进行过滤。这可以根据您的需要进行清理,但它可以使用item.parent ['class']来获取包含divs类进行比较。
from bs4 import BeautifulSoup
soup = BeautifulSoup(someHTML, 'html.parser')
results = soup.findAll(class_="author")
for item in results:
if 'comments' in item.parent['class']:
pass
else:
print item
或者理解:
clean_results = [item for item in results if 'comments' not in item.parent['class']]