假设我有以下html
:
<h4>
<a href="http://www.google.com">Google</a>
</h4>
<h4>Random Text</h4>
我能够通过循环识别所有h4
标题,例如:
for url in soup.findAll("h4")
print(url.get_text())
这很有效,除了它包括&#34;随机文本&#34; h4
标题的元素。是否可以以编程方式删除不符合特定条件的h4
标题的出现次数 - 例如,那些不包含链接的标题?
答案 0 :(得分:3)
当然,您可以采用简单的方法,只需过滤标题:
for url in soup.find_all("h4")
if not url.a: # "url.a" is a shortcut to "url.find('a')"
continue
print(url.get_text())
或者,更好的方法是使用function
过滤它们for url in soup.find_all(lambda tag: tag.name == "h4" and tag.a):
print(url.get_text())
或者,更好的是,直接转到a
元素:
for url in soup.select("h4 > a"):
print(url.get_text())
h4 > a
这里有一个CSS selector,可以匹配a
个标记的直接子元素h4
元素。
答案 1 :(得分:0)
使用列表理解作为最pythonic方法:
[i.get_text() for i in soup.findAll("h4") if #Insert criteria here#]