BeautifulSoup4 find_all搜索包含指定文本内容的标签返回空list的问题

最近帮助公司其他团队用python写了一个爬虫,遇到了不少问题,其中就有一个问题是使用BeautifulSoup4的find_all搜索包含指定文本内容时返回的是空的list,查看了官方文档也上google搜索了一些类似的问题,发现是因为在使用bs4的find_all结合正则表达式查找指定文本的时候,搜索的是bs4返回元素中string属性中的信息,而不是text属性。并且如果某个元素中如果还包含除了文本之外的子元素,string属性返回会是None,而不是像text属性中那样的文本信息。

如果HTML中的内容结构像下面这样:

some text 

more text

even

more text

td 上的.string属性将会返回下面的内容:
1、some text
2、None
3、more text
4、None

.text 属性将会返回下面的内容:
1、some text
2、
3、more text
4、even more text

如果想要了解.find.string之间的差异可以查看Python BeautifulSoup 中.text与.string的区别

解决办法是使用lambda函数

>>> soup.find_all(lambda e: e.name == 'td' and 'Black' in e.text)
[Black or African American alone, percent, 2013 (a)   , Black-owned firms, percent, 2007   ]

你可能感兴趣的:(BeautifulSoup4 find_all搜索包含指定文本内容的标签返回空list的问题)