遍历文档树
1.直接子节点:.contents .children属性
.content
Tag的.content属性可以将Tag的子节点以列表的方式输出
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | #!/usr/bin/python3 # -*- coding:utf-8 -*- from bs4 import BeautifulSoup html = "" " <html><head><title>The Dormouse's story</title></head> <body> <p class = "title" name= "dromouse" ><b>The Dormouse's story</b></p> <p class = "story" >Once upon a time there were three little sisters; and their names were <a href= "http://example.com/elsie" class = "sister" id= "link1" ><!-- Elsie --></a>, <a href= "http://example.com/lacie" class = "sister" id= "link2" >Lacie</a> and <a href= "http://example.com/tillie" class = "sister" id= "link3" >Tillie</a>; and they lived at the bottom of a well.</p> <p class = "story" >...</p> "" "另外要<strong>注意:</strong>光理论是不够的。这里顺便送大家一套2020最新python入门到高级项目实战视频教程,可以去小编的Python交流.裙 :七衣衣九七七巴而五(数字的谐音)转换下可以找到了,还可以跟老司机交流讨教! # 创建 Beautiful Soup 对象,指定lxml解析器 soup = BeautifulSoup(html, "lxml" ) # 输出方式为列表 print (soup.head.contents) print (soup.head.contents[0]) |
运行结果
1 2 | [<title>The Dormouse's story</title>] <title>The Dormouse's story</title> |
.children
它返回的不是一个列表,不过我们可以通过遍历获取所有的子节点。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 | #!/usr/bin/python3 # -*- coding:utf-8 -*- from bs4 import BeautifulSoup html = "" " <html><head><title>The Dormouse's story</title></head> <body> <p class = "title" name= "dromouse" ><b>The Dormouse's story</b></p> <p class = "story" >Once upon a time there were three little sisters; and their names were <a href= "http://example.com/elsie" class = "sister" id= "link1" ><!-- Elsie --></a>, <a href= "http://example.com/lacie" class = "sister" id= "link2" >Lacie</a> and <a href= "http://example.com/tillie" class = "sister" id= "link3" >Tillie</a>; and they lived at the bottom of a well.</p> <p class = "story" >...</p> "" " # 创建 Beautiful Soup 对象,指定lxml解析器 soup = BeautifulSoup(html, "lxml" ) # 输出方式为列表生成器对象 print (soup.head.children) # 通过遍历获取所有子节点 for child in soup.head.children: print (child) |
运行结果
1 2 | <list_iterator object at 0x008FF950> <title>The Dormouse's story</title> |
相关推荐:《Python相关教程》
2.所有子孙节点:.descendants属性
上面讲的.contents和.children属性仅包含Tag的直接子节点,.descendants属性可以对所有Tag的子孙节点进行递归循环,和children类似,我们也需要通过遍历的方式获取其中的内容。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 | #!/usr/bin/python3 # -*- coding:utf-8 -*- from bs4 import BeautifulSoup html = "" " <html><head><title>The Dormouse's story</title></head> <body> <p class = "title" name= "dromouse" ><b>The Dormouse's story</b></p> <p class = "story" >Once upon a time there were three little sisters; and their names were <a href= "http://example.com/elsie" class = "sister" id= "link1" ><!-- Elsie --></a>, <a href= "http://example.com/lacie" class = "sister" id= "link2" >Lacie</a> and <a href= "http://example.com/tillie" class = "sister" id= "link3" >Tillie</a>; and they lived at the bottom of a well.</p> <p class = "story" >...</p> "" " # 创建 Beautiful Soup 对象,指定lxml解析器 soup = BeautifulSoup(html, "lxml" ) # 输出方式为列表生成器对象 print (soup.head.descendants) # 通过遍历获取所有子孙节点 for child in soup.head.descendants: print (child) |
运行结果
1 2 3 | <generator object descendants at 0x00519AB0> <title>The Dormouse's story</title> The Dormouse's story |
3.节点内容:.string属性
如果Tag只有一个NavigableString类型子节点,那么这个Tag可以使用.string得到子节点。如果一个Tag仅有一个子节点,那么这个Tab也可以使用.string方法,输出结果与当前唯一子节点的.string结果相同。
通俗点来讲就是:如果一个标签里面没有标签了,那么.string就会返回标签里面的内容。如果标签里面只有唯一的一个标签了,那么.string也会返回里面的内容。例如:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | #!/usr/bin/python3 # -*- coding:utf-8 -*- from bs4 import BeautifulSoup html = "" " <html><head><title>The Dormouse's story</title></head> <body> <p class = "title" name= "dromouse" ><b>The Dormouse's story</b></p> <p class = "story" >Once upon a time there were three little sisters; and their names were <a href= "http://example.com/elsie" class = "sister" id= "link1" ><!-- Elsie --></a>, <a href= "http://example.com/lacie" class = "sister" id= "link2" >Lacie</a> and <a href= "http://example.com/tillie" class = "sister" id= "link3" >Tillie</a>; and they lived at the bottom of a well.</p> <p class = "story" >...</p> "" " # 创建 Beautiful Soup 对象,指定lxml解析器 soup = BeautifulSoup(html, "lxml" ) print (soup.head.string) print (soup.head.title.string) |
运行结果
1 2 | The Dormouse's story The Dormouse's story |
都懂了吗?最后注意:光理论是不够的。这里顺便送大家一套2020最新python入门到高级项目实战视频教程,可以去小编的Python交流.裙 :七衣衣九七七巴而五(数字的谐音)转换下可以找到了,还可以跟老司机交流讨教!
本文的文字及图片来源于网络加上自己的想法,仅供学习、交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理。