Beautiful Soup模块
功能
简而言之,解析和提取 HTML/XML 数据。
至于为什么要学这个模块?毕竟我也是刚学python道不出来这个模块的重要性,个人是觉得有趣(因为这是爬取小姐姐图片的必经之路哈哈哈哈),以下我也是跟着b站某老师(咱也不认识对不起了)做的笔记,自己觉得很有用边学边敲代码边做笔记就想记下来
五种基本元素:
基本元素
|
说明
|
Tag
|
标签是最基本的信息组织的单元,分别用<></>标明开头和结尾
|
Name
|
标签的名字,<p></p>的名字是p,格式:<tag>.name
|
attributes
|
标签的属性,字典形式组织(键和值),格式:<tag>.attrs
|
Navigablestring |
标签内非属性字符串,格式:<tag>.string
|
comment
|
标签内字符串的注释部分
|
属性
|
说明
|
.contens
|
子节点的列表,将<tag>所有儿子节点存入列表
|
.children
|
子节点的迭代类型,与.contens类似,用于循环遍历儿子节点
|
.descendants
|
子孙节点的迭代类型,包含所有子孙节点,用于循环遍历
|
属性
|
说明
|
.parents
|
节点的父亲标签
|
.parents
|
节点先辈标签的迭代类型用于循环遍历先辈节点
|
属性
|
说明
|
.next_sibling
|
返回按照HTML文本顺序的下一个平行节点的标签
|
.previous_sibling
|
返回按照HTML的文本顺序的上一个平行节点标签
|
.next_siblings
|
迭代类型,返回按照HTML文本顺序的后续所有平行节点的标签
|
.previous_siblings
|
迭代类型,返回按照HTML文本顺序的前续所有平行节点的标签
|
条件:平行遍历发生子啊同一个父亲节点下的各节点间
ps: Navigablestring也会构成标签树得节点,不能认为平行遍历到的下一个节点就是标签类型
实例
我将老师给的代码整合到一起,每句基本都会有注释,还没有学习python的小伙伴又不想看视频的话,把这些代码码一码也就差不多啦! 要注意的是,这里基本都是输出语句,一定要慢慢体会,print一个语句运行以下,比较输出结果分析输出内容一步步来,学完一个知识块以后记得注释掉,再接着学下一个知识块,我这样学自我感觉棒棒哒~~~~下面这个就不要注释掉了喔
基本元素练习代码块
下行遍历练习代码块
上行遍历练习代码块
平行遍历练习代码块
这里还是把源代码放一下,不要copy不要只顾着看,码一码
import requests
from bs4 import BeautifulSoup
url="http://python123.io/ws/demo.html"
r = requests.get(url)
demo = r.text
soup = BeautifulSoup(demo , 'html.parser') #html解释器
print(demo)
print(soup.prettify)#对比输出的不同,html解析的功能
#以下是五种基本元素的使用
tag = soup.a
print(tag)#输出a标签
print(tag.name) #输出标签的名字
print(tag.parent.name) #输出a的父类标签的名字
print(tag.attrs)#输出标签属性(输出方式为字典)
print(tag.attrs['class'])#输出['py1'],也就是属性class的值
print(tag.attrs['href'])#输出herf属性的值
print(type(tag.attrs)) #输出标签属性类型,这里是字典类型
print(type(tag))#输出标签的类型
print(tag.string)#输出a标签中的非属性字符串信息
print(soup.p.string)#输出p标签中的string
print(type(soup.p.string))#输出标签中的string的类型,是Navigablestring,有跨标签的性质所以p标签中的b标签并没有显示出来
newsoup = BeautifulSoup("<b><!--this is a comment--></b><p>this is not a moment</p>","html.parser")
#注释以<!--注释内容-->
print(newsoup)#并分析b标签和p标签的类型观察有什么不同
#标签数的下行遍历
tag = soup.body
print(tag)
print(tag.contents)#输出body标签的儿子节点,.contents返回的类型是列表
print(len(tag.contents))#返回儿子节点的数量,因为返回类型是列表类型所以可以用列表来检索标签内容
print(tag.contents[1])#输出列表第一个子节点
for child in tag.children:
print(child)#遍历所有儿子节点
for child in tag.descendants:
print(child)#遍历所有子孙节点
#标签树的上行遍历
tag = soup.title
print(tag.parent)#输出title标签的父亲
for parent in soup.a.parents:
if parent is None:
print(parent)
else:
print(print.name)#这里是遍历出a标签的所有父标签
#标签树的平行遍历
tag = soup.a
print(tag.next_sibling)#发现输出不是标签
print(tag.next_sibling.next_sibling)#a标签的下下个平行节点
print(tag.previous_sibling)#输出a标签的上一个平行节点
for sibling in tag.next_siblings:
print(sibling)#遍历后续节点
for sibling in tag.previous_siblings:
print(sibling)#遍历前续节点
记录我学习之路的同时希望这份笔记也能帮到你~~~