请选择 进入手机版 | 继续访问电脑版
在线投稿 文字标题 文字标题 文字标题 文字标题 文字标题
切换皮肤
接上篇:
?url=http%3A%2F%2Fdingyue.ws.126.net%2F2020%2F0416%2F96e39ff4j00q8uua50010d000mv00bkp.jpg

5. 遍历文档树
(1)直接子节点
Tag的.content属性可以将tag的子节点以列表的形式输出,用例:
输出:
Tag的.children属性可以将tag的所有子节点返回,返回形式不是一个list,而是一个list生成器,需要通过遍历来获取所需的子节点,用例:
输出:
?url=http%3A%2F%2Fdingyue.ws.126.net%2F2020%2F0416%2Fe124c559p00q8uu1x000tc000rd008wm.jpg
(2)所有子孙节点
.children和.content返回的仅仅是tag的直接子节点,而.descendants可以对所有tag的子孙节点进行递归循环遍历,用例:
?url=http%3A%2F%2Fdingyue.ws.126.net%2F2020%2F0416%2F5e5ee7f0p00q8uu1x0007c000es002hm.jpg
输出:
?url=http%3A%2F%2Fdingyue.ws.126.net%2F2020%2F0416%2F7a787831p00q8uu1x001tc000r500n8m.jpg
从输出结果来看,所有节点都被打印出来,首先是最外层的html标签,接着是head标签,一层层的剥离。
(3)节点内容
如果tag只有一个 NavigableString 类型子节点,那么这个tag可以使用 .string 得到子节点。如果一个tag仅有一个子节点,那么这个tag也可以使用 .string 方法,输出结果与当前唯一子节点的 .string 结果相同。
如果tag包含了多个子节点,tag就无法确定string 方法应该调用哪个子节点的内容, .string 的输出结果是 None,用例:
?url=http%3A%2F%2Fdingyue.ws.126.net%2F2020%2F0416%2F40bafebcp00q8uu1x0002c000am002cm.jpg
输出:
?url=http%3A%2F%2Fdingyue.ws.126.net%2F2020%2F0416%2F1000d6e3p00q8uu1x0002c000a6002bm.jpg
(4)多个内容
.strings属性可以获得多个内容,通过遍历实现,用例:
输出:
?url=http%3A%2F%2Fdingyue.ws.126.net%2F2020%2F0416%2Fb816ffd1p00q8uu1x000fc000lu00gvm.jpg
输出的字符串中可能包含了很多空格或空行,使用 .stripped_strings 可以去除多余空白内容,用例:
输出:
?url=http%3A%2F%2Fdingyue.ws.126.net%2F2020%2F0416%2F34a7a91bp00q8uu1x000dc000lw0080m.jpg
(5)父节点
通过元素的 .parents属性可以得到元素的所有父节点,用例:
?url=http%3A%2F%2Fdingyue.ws.126.net%2F2020%2F0416%2F4fe00f5ep00q8uu1x0004c000ax003wm.jpg
输出:
(6)所有父节点
通过元素的 .parents 属性可以递归得到元素的所有父辈节点,用例:
?url=http%3A%2F%2Fdingyue.ws.126.net%2F2020%2F0416%2Fb53ea532p00q8uu1x0007c000br002dm.jpg
输出:
?url=http%3A%2F%2Fdingyue.ws.126.net%2F2020%2F0416%2Fa7fd958ep00q8uu1x0002c000880036m.jpg
(7)兄弟节点
兄弟节点可以理解为和本节点处在统一级的节点,.next_sibling 属性获取了该节点的下一个兄弟节点,.previous_sibling 则与之相反,如果节点不存在,则返回 None
注意:实际文档中的tag的 .next_sibling 和 .previous_sibling 属性通常是字符串或空白,因为空白或者换行也可以被视作一个节点,所以得到的结果可能是空白或者换行,用例:
?url=http%3A%2F%2Fdingyue.ws.126.net%2F2020%2F0416%2Fb9099d0ep00q8uu1x0006c000ad002im.jpg
输出都是空白,但是下面用例:
输出:
?url=http%3A%2F%2Fdingyue.ws.126.net%2F2020%2F0416%2F8d968b59p00q8uu1x000nc000rf0043m.jpg
(8)全部兄弟节点
通过 .next_siblings 和 .previous_siblings 属性可以对当前节点的兄弟节点迭代输出,用例:
输出:
?url=http%3A%2F%2Fdingyue.ws.126.net%2F2020%2F0416%2Fb8c961a7p00q8uu1x000fc000mj0068m.jpg
下节待续......

回复

使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则


    Archiver|手机版|小黑屋|齐聚无忧 |网站地图

    Powered by Discuz! X3.4  © 2001-2013 Comsenz Inc.