如何防止在find_all()中打印特定字符串?

时间:2016-10-05 12:21:36

标签: python web-scraping

如何排除在对象obj

中打印子字符串
obj = soup.find_all('tag')
if "string" not in obj.text:
    print obj.text

但由于对象obj使用了find_all()方法,因此没有打印任何内容。 应该做什么,以便我们只在obj中打印想要的字符串。

1 个答案:

答案 0 :(得分:0)

您需要遍历find_all()返回的列表:

for i in soup.find_all('tag'):
    txt = i.text
    if 'string' not in txt:
        print txt

或者,您可以创建另一个列出过滤掉不需要的标签的列表:

filtered_lst = [i for i in soup.find_all('tag') if 'string' not in i.text]

这将为您提供Tag个与find_all()返回的对象类似的对象列表,但只包含'string'中不包含.text的标记。之后,你可以做你想做的事情:

for tag in filtered_lst:
    print tag.text

更新

另一方面,如果您的目标只是从标记文本中过滤'string',则可以使用replace()字符串方法:

for tag in soup.find_all('tag'):
    print tag.text.replace('string', '')

但是,请记住,这会删除'string'文本中的任何位置,并且可能会留下不需要的空格以便稍后删除。例如:

>>> 'hellostring string'.replace('string', '')
'hello '