从Web Scraped Loop中排除项目

时间:2016-10-18 19:37:43

标签: python web-scraping beautifulsoup

假设我有以下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标题的出现次数 - 例如,那些不包含链接的标题?

2 个答案:

答案 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#]