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

最近帮助公司其他团队用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>]
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,937评论 18 139
  • pyspark.sql模块 模块上下文 Spark SQL和DataFrames的重要类: pyspark.sql...
    mpro阅读 9,504评论 0 13
  • 百香果——“黄金百香果”,随着政府惠农政策扶持下,在中仙吉华村掀起了一股百香果“黄金热”,一说百香果家喻户晓,我也...
    长林张少阅读 2,142评论 0 2
  • 虫虫从睡梦中醒来,一边哭一边往外跑,嘴里喊着“妈妈……爸爸……” 坏坏正骑在小马桶上拉臭臭,我听见开门声就立马从炕...
    烟然s阅读 244评论 1 7
  • 《爱的阳台》看到最后,就是这样慌落落的感觉。 翻最初几页的时候,在想:诶,艺术家这照片构图也不如何啊! 慢慢翻,有...
    八月石楠and云间花落阅读 690评论 0 2