python BeautifulSoup库的安装与使用


Posted in Python onDecember 17, 2020

1.BeautifulSoup简介

BeautifulSoup4和 lxml 一样,Beautiful Soup 也是一个HTML/XML的解析器,主要的功能也是如何解析和提取 HTML/XML 数据。

BeautifulSoup支持Python标准库中的HTML解析器,还支持一些第三方的解析器,如果我们不安装它,则 Python 会使用 Python默认的解析器,lxml 解析器更加强大,速度更快,推荐使用lxml 解析器。

Beautiful Soup自动将输入文档转换为Unicode编码,输出文档转换为utf-8编码。你不需要考虑编码方式,除非文档没有指定一个编码方式,这时,Beautiful Soup就不能自动识别编码方式了。然后,你仅仅需要说明一下原始编码方式就可以了。

2.BeautifulSoup的安装

首先我们需要安装一个BeautifulSoup库。我安装的版本是python3。所以就可以直接在cmd下用pip3命令进行安装。

命令:

pip3 install beautifulsoup4

在安装好BeautifulSoup后,我们可以通过导入该库来判断是否安装成功。

命令:

>>> from bs4 import BeautifulSoup

 回车后不报错,这说明我们已经将其安装成功。

3.BeautifulSoup常用功能

# beautiful soup 网页中提取信息的python库
#  BeautifulSoup 对象表示的是一个文档的全部内容
#  prettify() 按照标准的缩进格式的结构输出
#  get_text() 会将HTML文档中的所有标签清除,返回一个只包含文字的字符串
from bs4 import BeautifulSoup

text='''
<?xml version="1.0" encoding="ISO-8859-1"?>

<bookstore>

<book>
 <title lang="eng">Harry Potter</title>
 <price>29.99</price>
</book>

<book>
 <title lang="eng">Learning XML</title>
 <price>39.95</price>
</book>

</bookstore>
'''

# create 对象
bf=BeautifulSoup(text)

# 按照标准缩进格式输出
print(bf.prettify())
# 会将HTML文档中的所有标签清除,返回一个只包含文字的字符串
print(bf.get_text())

# Tag对象 
# 标签 表示HTML中的一个个标签
# name
# attrs

tag=bf.title # 获取title标签
print(tag)
print(type(tag)) # tag类型
print(tag.name) # 标签名称
print(tag.attrs) #标签属性
print(tag.attrs["lang"]) #单独获取某个属性 方法1
print(bf.title["lang"]) #单独获取某个属性 方法2

# NavigableString tag.string
# 表示标签中的文字
print(tag.string)
print(type(tag.string)) # 查看数据类型

# Comment 注释部分
# 一个特殊类型的NavigableString对象
# 输出的内容不包括注释符号
string='''
<p><!-- 这是注释! --></p>
'''
sp=BeautifulSoup(string)
print(sp)
print(sp.p.string) # 去获取标签中是文字
# 两个常用函数 


# find_all() 搜索当前tag的所有tag子节点,并判断是否符合给定的条件
# 返回结果是一个列,可以包含多个元素
print(soup.find_all('title'),end="\n-------\n")

#find() 直接返回第一个元素
print(soup.find("title"))

print(soup.find_all("title",lang="eng")) # 查找title标签 属性lang=eng
print(soup.find_all("title",{"lang":"eng"})) # 结果同上
print(soup.find_all(["title","price"])) #获取多个标签
print(soup.find_all("title",lang="eng")[0].get_text()) # 获取文本


# 三大常见节点
#  子节点 一个Tag可能包含多个字符串或其他的tag,这些都是这个tag的子节点
#  父节点 配个tag或字符串都有父节点:被包含在某个tag中
#  兄弟节点 平级的节点
end="\n-------\n"
print(soup.book,end) # 获取book节点信息
print(soup.book.contents,end) # 获取book下的所有子节点
print(soup.book.contents[1],end) # 获取book下的所有子节点中的第一个节点

print(soup.book.children,end) # children 生成迭代器
for child in soup.book.children:
  print("===",child)
  
print(soup.title.parent,end)
print(soup.book.parent,end)
for parent in soup.title.parents: #注意parent和parents区别
  print("===",parent.name)
  
print(soup.title.next_sibling,end) # 获取该节点的下一个兄弟节点
print(soup.title.previous_sibling,end) # 获取该节点的上一个兄弟节点
print(soup.title.next_siblings,end) # 获取该节点的全部兄弟节点
for i in soup.title.next_siblings: 
  print("===",i)

以上就是python BeautifulSoup库的安装与使用的详细内容,更多关于python BeautifulSoup库的资料请关注三水点靠木其它相关文章!

Python 相关文章推荐
python django集成cas验证系统
Jul 14 Python
详解Django框架中用户的登录和退出的实现
Jul 23 Python
详解python 发送邮件实例代码
Dec 22 Python
详解Python import方法引入模块的实例
Aug 02 Python
50行Python代码实现人脸检测功能
Jan 23 Python
运行django项目指定IP和端口的方法
May 14 Python
tensorflow 加载部分变量的实例讲解
Jul 27 Python
python使用pygame框架实现推箱子游戏
Nov 20 Python
python基于SMTP协议发送邮件
May 31 Python
Transpose 数组行列转置的限制方式
Feb 11 Python
python实现梯度下降算法的实例详解
Aug 17 Python
用Python进行websocket接口测试
Oct 16 Python
python中翻译功能translate模块实现方法
Dec 17 #Python
python中count函数知识点浅析
Dec 17 #Python
Python 使用SFTP和FTP实现对服务器的文件下载功能
Dec 17 #Python
python爬虫利器之requests库的用法(超全面的爬取网页案例)
Dec 17 #Python
python使用smtplib模块发送邮件
Dec 17 #Python
python实现计算器简易版
Dec 17 #Python
利用Python实现自动扫雷小脚本
Dec 17 #Python
You might like
用缓存实现静态页面的测试
2006/12/06 PHP
Apache2中实现多网站域名绑定的实现方法
2011/06/01 PHP
PHP执行Curl时报错提示CURL ERROR: Recv failure: Connection reset by peer的解决方法
2014/06/26 PHP
PHP实现无限级分类(不使用递归)
2015/10/22 PHP
PHP按指定键值对二维数组进行排序的方法
2015/12/22 PHP
PHP实现上一篇下一篇的方法实例总结
2016/09/22 PHP
PhpStorm terminal无法输入命令的解决方法
2016/10/09 PHP
PHP 加密 Password Hashing API基础知识点
2020/03/02 PHP
Javascript 各浏览器的 Javascript 效率对比
2008/01/23 Javascript
JS 面向对象的5钟写法
2009/07/31 Javascript
jQuery Ajax请求状态管理器打包
2012/05/03 Javascript
node.js中的http.response.addTrailers方法使用说明
2014/12/14 Javascript
js简单实现点击左右运动的方法
2015/04/10 Javascript
巧用jQuery选择器提高写表单效率的方法
2016/08/19 Javascript
解析AngularJS中get请求URL出现的跨域问题
2016/12/01 Javascript
JavaScript模板引擎Template.js使用详解
2016/12/15 Javascript
JavaScript 巧学巧用
2017/05/23 Javascript
JS实现利用两个队列表示一个栈的方法
2017/12/13 Javascript
解决betterScroll在vue中存在图片时,出现拉不动的问题
2018/09/27 Javascript
详解angular2 控制视图的封装模式
2018/12/27 Javascript
vue+egg+jwt实现登录验证的示例代码
2019/05/18 Javascript
[52:03]DOTA2-DPC中国联赛 正赛 Ehome vs iG BO3 第三场 1月31日
2021/03/11 DOTA
python引用DLL文件的方法
2015/05/11 Python
Python单元测试与测试用例简析
2019/11/09 Python
Python使用matplotlib绘制Logistic曲线操作示例
2019/11/28 Python
在pytorch中对非叶节点的变量计算梯度实例
2020/01/10 Python
卫校护理专业毕业生求职信
2013/11/26 职场文书
创业计划书怎样才能打动风投
2014/01/01 职场文书
餐饮加盟计划书
2014/01/10 职场文书
语文教学感言
2014/02/06 职场文书
小学教师培训感言
2014/02/11 职场文书
反邪教标语
2014/06/23 职场文书
基层领导干部“四风”问题批评与自我批评
2014/09/23 职场文书
房产协议书范本
2014/10/18 职场文书
试用期自我评价怎么写
2015/03/10 职场文书
入党积极分子群众意见
2015/06/01 职场文书