美文网首页大数据 爬虫Python AI Sql
BeautifulSoup4 find_all搜索包含指定文本内

BeautifulSoup4 find_all搜索包含指定文本内

作者: 吃素的外星人 | 来源:发表于2018-08-30 16:21 被阅读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>]
    

    相关文章

      网友评论

        本文标题:BeautifulSoup4 find_all搜索包含指定文本内

        本文链接:https://www.haomeiwen.com/subject/iikdwftx.html