bs4介绍目录:1:bs4简介1.1:bs4是什么1.2:有什么用1.3:有什么意义2:bs4源码分析2.1:为什么分析源码3:bs4快速入门3.1:创建一个soup对象3.2:bs4、xpath和re的比较3.3:bs4常用方法3.3.1:获取一个标签及标签里面的内容3.3.2:只获取一个标签里面的内容,不获取标签3.3.3:只获取标签名3.3.4:获取多个标签3.3.5:得到标签的属性值4:bs4的对象种类(了解)4.1:tag使用方法4.2:NavigableString使用方法4.3:BeautifulS
1:bs4 简介
1.1:bs4是什么
bs4全称:beautifulsoup4,意思为美丽的汤版本4
可以在HTML或XML文件中提取数据的网页信息提取库
1.2:有什么用
1.3:有什么意义
pc端网络中抓取数据如:百度网站、腾讯网站等,随着的网络种类的增多,我们应该去寻找解析这个网站最适合的解析方法
与re和xpath模块的区别:
re模块:使用起来过于麻烦且阅读性不好
xpath模块:需要使用一些特定的语法
bs4模块:只需要记住一些方法如:find()、find_all(),后面会发现bs4可以认为是re和xpath的混合使用
总结
在爬取不同的网站的时候,寻找最适合的解析数据方法
可以与别的解析方法进行比较
2:bs4源码分析
分析bs4的源码用来提高对bs4模块的认识
源码下载:github下载源码
安装模块:先安装lxml模块,在安装bs4模块
2.1:为什么分析源码
了解原理、了解工作方法
学习思路
开发者必备的一项技能
3:bs4快速入门
bs4是依赖lxml库的,只有先安装lxml库才可以安装bs4库
3.1:创建一个soup对象
from bs4 import BeautifulSoup
html_doc = """
<html><head><title>The Dormouse's story</title></head>
<body>
<p class="title"><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>
"""
# 因为BeautifulSoup是一个类,所以要实例化类,参数html_doc是要转化为soup对象的数据,features则是要转化为soup对象时编码的方法
soup = BeautifulSoup(html_doc, features="lxml")
# prettify:意思是把soup对象漂亮的打印出来
print(soup.prettify())
features=“lxml”:解析器,就是把lxml数据转化为soup数据的编码方法
3.2:bs4、xpath和re的比较
1:re模块:语法简单,但是不好编写而且阅读性差
2:xpath模块:使用方法简单,但是要记住xpath语法,并且在使用的时候还要把数据转化为element对象才可以使用xpath语法进行索引导航
3:bs4:可以说是re模块和xpath模块的混合版,可以使用特定的字符串来索引,并且不需要把数据进行转化,但是要对数据进行编译为soup对象,才可以使用soup对象中的方法
总结:这三种解析数据的方法都各有利弊,我们在解析网页数据的时候,只要寻找最合适的解析数据的方法就可以了,这三个解析方法没有没有高低之分,只要找到最合适的解析方法就合适了。
3.3:bs4常用方法
3.3.1:获取一个标签及标签里面的内容
语法:soup.tag_name print(soup.title)
返回值:<title>The Dormouse's story</title>
3.3.2:只获取一个标签里面的内容,不获取标签
print(soup.title.string)
3.3.3:只获取标签名
语法:soup.title.name print(soup.title.name)
返回值:title
总结:感觉这个方法没有什么用,因为我们就是通过标签名来获取标签名的
3.3.4:获取多个标签
soup.title:只可以获取一个数据为title的标签数据,但是要多个title标签的时候只返回第一个title标签
find_all(‘a’):可以获得所有的标签a,以一个列表的形式返回 soup.find_all('a')
返回值:
[<p class="title"><b>The Dormouse's story</b></p>, <p class="story">Once upon a time there were three little sisters; and their names were
<a class="sister" href="http://example.com/elsie" id="link1">Elsie</a>,
<a class="sister" href="http://example.com/lacie" id="link2">Lacie</a> and
<a class="sister" href="http://example.com/tillie" id="link3">Tillie</a>;
and they lived at the bottom of a well.</p>, <p class="story">...</p>]
3.3.5:得到标签的属性值
links = soup.find_all('a')
for link in links:
print(link.get('href'))
http://example.com/elsie
http://example.com/lacie
http://example.com/tillie
4:bs4的对象种类(了解)
主要有
tag : 标签
NavigableString : 可导航的字符串
BeautifulSoup : bs对象
Comment : 注释
4.1:tag使用方法
soup.title
结果:获得的是一个标签的标签和内容
4.2:NavigableString 使用方法
soup.title.string
结果:获得的是一个标签里面的数据
4.3:BeautifulSoup使用方法
我们一直在使用这个方法,用来创建一个bs4(soup)对象
结果:一个soup对象
4.4:Comment使用方法
soup.string
如果标签的内容为注释内容返回的就是Comment对象
5:遍历文档树
bs里面有三种情况,第一个是遍历,第二个是查找,第三个是修改
ontents、children、descendants方法总结
方法名
描述
contents
返回的是一个所有子节点的列表
children
返回的是一个子节点的迭代器通
descendants
返回的是一个生成器遍历子子孙孙
string、strings、stripped_strings方法总结
方法名
描述
string
获取标签里面的内容
strings
返回是一个生成器对象用过来获取多个标签内容
stripped_strings
和strings基本一致 但是它可以把多余的空格去掉
遍历文档树 遍历父节点,parent 和 parents
方法名
描述
parent
直接获得父节点
parents
获取所有的父节点
遍历文档树 遍历兄弟结点
方法名
描述
next_sibling
下一个兄弟结点
previous_sibling
上一个兄弟结点
next_siblings
下一个所有兄弟结点
previous_siblings
上一个所有兄弟结点
6:find()和find_all()方法(重点)
是两个方法,需要传递参数
有字符串过滤器和列表过滤器,用来过滤不需要的数据(无用的数据)
6.1:字符串过滤器
可以找到一个符合条件的数据
1:语法:soup.find('a')
与soup.a的作用一样
作用:获取数据中的第一个’a’标签
2:soup.find_all(‘a’)
作用:获取数据中所有’a’标签的数据
6.2:列表过滤器
可以同时获取多个想要的数据
soup.find_all[‘title’, ‘a’]
要筛选的数据用列表封装
作用:返回数据中所有的’title’标签和’a’标签
6.3:寻找符合我们所要条件的标签
6.3.1:使用索引的方式获取
soup.find_all(‘a’)[1]
作用:获取符合要求的第二个标签数据
6.3.2:使用关键字进行索引
1:soup.find_all(‘a’, class_=‘even’)
作用:获取class属性为’even’的’a’标签
注意:因为class被python团队使用了作为python的关键字所以使用class_,在python中**“class”等效于”class_”**
2:如果不想使用class_可以使用一个字典来进行索引
3:获取多个限制条件的索引
soup.find_all(‘a’, id=‘text’, class_=‘text’)
作用:获取同时有id=’text’和class=’text’的’a’标签
6.4:获取标签属性的方法
6.4.1:使用get()方法
1:a.get(‘href’)
作用:获取标签a的href属性值
2:a[‘href’]
作用:和a.get(‘href’)是等价的
7:select介绍
7.1:select与find和find_all的区别
select和find_all的作用是一样的
select_one的作用和find的作用是一样的
7.2:select的常用方法
主要介绍如何通过标签吗名、类名、id和一些特殊的方法来查找查找数据
7.2.1:通过标签名来查找元素
语法:soup.select("a")
返回值:以列表,返回soup中的所有“a”标签
7.2.2:通过class来查找元素
语法:soup.elect('.info')
返回值:以列表的形式返回soup中,所有class属性为”info”的标签
7.2.3:通过id来查找元素
语法:soup.elect("#link")
返回值:以列表的形式返回soup中,所有id属性为”link”d的标签
7.2.4:特殊的查找方式
语法:soup.elect("div>p")
返回值:一列表的形式返回soup中,所有父标签为“div”的”p”标签
7.3:寻找标签中的文本内容
7.3.1:select的返回类型
7.3.2:返回一个标签里面的文本内容
语法:soup.elect("a").string
返回值:返回这个标签的文本内容
可以把这个语法换为:soup.elect('a').get_text
,两者的作用是一样的
7.3.3:返回多的标签里面的数据
语法:soup.elect('a').strings
返回值:返回soup中所有a,标签的文档数据的一个生成器
8:修改文档树
主要介绍修改tag、string、添加内容和删除内容的方法
其做法和python语法里面的赋值语法相似
8.1:修改Tag的名称和属性
修改Tag的名称
语法:soup.name=new_name
返回值:把soup中name的Tag属性换为new_name
修改Tag的属性
语法:soup.Tag[class]='new_class'
返回值:把soup中tag的class属性转换为new_class
8.2:其它修改方法
string:修改标签的文档属性
append:向Tag当中添加内容
delcompose:删除Tag当中的内容
今天的文章bs4介绍 分享到此就结束了,感谢您的阅读。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。 如需转载请保留出处:https://bianchenghao.cn/6771.html