大数据 爬虫Python AI Sql

BeautifulSoup4 find_all搜索包含指定文本内

2018-08-30  本文已影响0人  吃素的外星人

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

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

<td>some text</td> 
<td></td>
<td><p>more text</p></td>
<td>even <p>more text</p></td>

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)
[<td id="rp10" valign="top">Black or African American alone, percent, 2013 (a)  <!-- RHI225213 --> </td>, <td id="re6" valign="top">Black-owned firms, percent, 2007  <!-- SBO315207 --> </td>]
上一篇下一篇

猜你喜欢

热点阅读