为啥这代码运行结果会出现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 这一类过滤器, 而不是遍历所有节点.
■网友
盛情难却,多位同学相邀,黄哥以前也没有碰到这样的错误,加一个判断过滤掉。
推荐阅读
- #医保云#备案报销手机搞定 看病买药“一码通行” 江苏医保云平台上线试运行
- 「降雪」目前江苏全省道路运行基本顺畅 降雪持续
- 京哈高铁北京至承德段进入运行试验阶段
- 「淮镇段」连淮扬镇铁路全线贯通在即 淮镇段再次试运行
- 为啥看到书柜上的藏书会有心旷神怡的感觉
- 为啥知乎上普便有一种【我在北上广深打工,所以拥有更好的视野】这样的错觉
- 为啥工商银行的用户体验如此之差
- 汽车|看了中消协4S店服务测评调查结果,终于知道法系车为啥卖不好了
- 你为啥从窝窝商城离职?
- |受检样品全部为阴性 高新区冷链食品集中监管仓运行良好
