为啥这代码运行结果会出现NavigableString对象

BeautifulSoup常见问题归类
问题一: 文本节点 【为啥这代码运行结果会出现NavigableString对象】 首先看两个HTML代码:
这是你眼中的HTML代码
\u0026lt;html\u0026gt; \u0026lt;body\u0026gt; \u0026lt;li\u0026gt; \u0026lt;a class="reference internal" href="https://www.zhihu.com/api/v4/questions/57039626/#installing-beautiful-soup"\u0026gt; Installing Beautiful Soup \u0026lt;/a\u0026gt; \u0026lt;ul\u0026gt; \u0026lt;li\u0026gt; \u0026lt;a class="reference internal" href="https://www.zhihu.com/api/v4/questions/57039626/#problems-after-installation"\u0026gt; Problems after installation \u0026lt;/a\u0026gt; \u0026lt;/li\u0026gt; \u0026lt;li\u0026gt; \u0026lt;a class="reference internal" href="https://www.zhihu.com/api/v4/questions/57039626/#installing-a-parser"\u0026gt; Installing a parser \u0026lt;/a\u0026gt; \u0026lt;/li\u0026gt; \u0026lt;/ul\u0026gt; \u0026lt;/li\u0026gt; \u0026lt;/body\u0026gt;\u0026lt;/html\u0026gt;这是计算机眼中的HTML代码:
\u0026#39;\u0026lt;html\u0026gt;\ \u0026lt;body\u0026gt;\ \u0026lt;li\u0026gt;\ \u0026lt;a class="reference internal" href="https://www.zhihu.com/api/v4/questions/57039626/#installing-beautiful-soup"\u0026gt;\ Installing Beautiful Soup\ \u0026lt;/a\u0026gt;\ \u0026lt;ul\u0026gt;\ \u0026lt;li\u0026gt;\ \u0026lt;a class="reference internal" href="https://www.zhihu.com/api/v4/questions/57039626/#problems-after-installation"\u0026gt;\ Problems after installation\ \u0026lt;/a\u0026gt;\ \u0026lt;/li\u0026gt;\ \u0026lt;li\u0026gt;\ \u0026lt;a class="reference internal" href="https://www.zhihu.com/api/v4/questions/57039626/#installing-a-parser"\u0026gt;\ Installing a parser\ \u0026lt;/a\u0026gt;\ \u0026lt;/li\u0026gt;\ \u0026lt;/ul\u0026gt;\ \u0026lt;/li\u0026gt;\ \u0026lt;/body\u0026gt;\\u0026lt;/html\u0026gt;\u0026#39;结论: 在BS4中, 我们在HTML中看到的换行符以及空格都是NavigableString 也就是文本节点.
问题二: 滥用遍历文档树的方法常见的方法有:
contentsdescendantsparentnext_siblingnext_element这些方法都会遍历文档树中的所有节点, 包括文本节点. 也就是说: 只要你使用这些方法, 你就一定会选择出许多文本节点, 因为文本节点无处不在: 换行, 空格等.
解决方法: 使用过滤器find等方法:
soup.find(name=\u0026#39;tagname\u0026#39;)当我们一旦在过滤器中指定了name关键字, 那么返回的结果就一定是tag对象, 因为文档节点没有name属性.
结论: 大多数情况下, 你需要的是find 这一类过滤器, 而不是遍历所有节点.

■网友
为啥这代码运行结果会出现NavigableString对象

盛情难却,多位同学相邀,黄哥以前也没有碰到这样的错误,加一个判断过滤掉。为啥这代码运行结果会出现NavigableString对象


    推荐阅读