记我是如何入门python中BeautifulSoup模块的

Beautiful Soup模块

功能

简而言之,解析和提取 HTML/XML 数据。

至于为什么要学这个模块?毕竟我也是刚学python道不出来这个模块的重要性,个人是觉得有趣(因为这是爬取小姐姐图片的必经之路哈哈哈哈),以下我也是跟着b站某老师(咱也不认识对不起了)做的笔记,自己觉得很有用边学边敲代码边做笔记就想记下来

Evernote Export

五种基本元素:

基本元素
说明
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)#遍历前续节点

记录我学习之路的同时希望这份笔记也能帮到你~~~

发布了18 篇原创文章 · 获赞 100 · 访问量 6361

猜你喜欢

转载自blog.csdn.net/qq_43571759/article/details/105029238