Beautiful Soup应用示例
Beautiful Soup应用示例
简介
Beautiful Soup是一个可以从HTML或XML文件中提取数据的Python库,它能够通过你喜欢的转换器实现惯用的文档导航,查找,修改文档的方式。
快速入门
from bs4 import BeautifulSoup
broken_html = '<ul class=country><li>Area<li>Population</ul>'
soup = BeautifulSoup(broken_html, 'lxml')
fixed_html = soup.prettify()
# <html>
# <body>
# <ul class="country">
# <li>
# Area
# </li>
# <li>
# Population
# </li>
# </ul>
# </body>
# </html>
print(fixed_html)
ul = soup.find('ul', attrs={'class': 'country'})
# <li>Area</li>
ul.find('li')
#[<li>Area</li>, <li>Population</li>]
ul.find_all('li')
安装Beautiful Soup
- Beautiful Soup 4通过PyPi发布,可以通过pip安装。
pip install beautifulsoup4
- 安装解析器,Beautiful Soup支持python标准库中的HTML解析器,还支持一些第三方的解析器,比如lxml和html5lib。
pip install lxml
pip install html5lib
- 解析器对比
解析器 | 使用方法 | 优势 | 劣势 |
---|---|---|---|
Python标准库 |
BeautifulSoup(markup, "html.parser")
|
Python的内置标准库,执行速度适中,文档容错能力强 | Python3.2.2前的版本中文档容错能力强 |
lxml HTML解析器 |
BeautifulSoup(markup, "lxml")
|
速度快,文档容错能力强 | 需要安装C语言库 |
lxml XML解析器 |
BeautifulSoup(markup, ["lxml-xml"]) ,BeautifulSoup(markup, "xml")
|
速度快,唯一支持XML的解析器 | 需要安装C语言库 |
html5lib |
BeautifulSoup(markup, "html5lib")
|
最好的容错性,以浏览器的方式解析文档,生成HTML5格式的文档 | 速度慢,不依赖外部扩展 |
- lxml的使用
import lxml.html as lh
broken_html = '<ul class=country><li>Area<li>Population</ul>'
tree = lh.fromstring(broken_html)
fixed_html = lh.tostring(tree, pretty_print=True)
# b'<ul class="country">\n<li>Area</li>\n<li>Population</li>\n</ul>\n'
print(fixed_html)
对象的种类
Beautiful Soup将复杂HTML文档转换成一个复杂的树形结构,每个节点都是Python对象,所有对象可以归纳为4种:
Tag
,NavigableString
,BeautifulSoup
,Comment
。
- Tag
(1)Tag对象与XML或HTML原生文档中的tag相同
soup = BeautifulSoup('<b class="boldest">Extremely bold</b>')
tag = soup.b
# bs4.element.Tag
type(tag)
(2)Tag有很多方法和属性,最重要的属性name和attributes
# 通过.name获取标签名, 'b'
tag.name
# 如果改变了tag的name,那将影响所有通过当前Beautiful Soup对象生成的HTML文档
tag.name = "blockquote"
# <blockquote class="boldest">Extremely bold</blockquote>
tag
# 一个tag可能有很多个属性,tag有一个class属性,['boldest']
tag['class']
# 也可以直接使用“点”取属性,{'class': ['boldest']}
tag.attrs
# tag的属性可以被添加,删除或修改,tag的属性操作方法与字典一样
tag['class'] = 'verybold'
tag['id'] = 1
# <blockquote class="verybold" id="1">Extremely bold</blockquote>
tag
del tag['class']
del tag['id']
# <blockquote>Extremely bold</blockquote>
tag
# 多值属性,HTML 4定义了一系列可以包含多个值的属性.在HTML5中移除了一些,却增加更多.最常见的多值的属性是class,在bs4中多值属性返回类型是list
css_soup = BeautifulSoup('<p class="body strikeout"></p>')
# ['body', 'strikeout']
css_soup.p['class']
# 将tag转换成字符串时,多值属性会合并为一个值
rel_soup = BeautifulSoup('<p>Back to the <a rel="index">homepage</a></p>')
# ['index']
rel_soup.a['rel']
rel_soup.a['rel'] = ['index', 'contents']
# <p>Back to the <a rel="index contents">homepage</a></p>
print(rel_soup.p)
- 可以遍历的字符串
# 字符串常被包含在tag内,NavigableString类用来包装tag中的字符串
soup = BeautifulSoup('<b class="boldest">Extremely bold</b>')
tag = soup.b
# 'Extremely bold'
tag.string
# bs4.element.NavigableString
type(tag.string)
# tag中包含的字符串不能编辑,但是可以使用replace_with()方法替换
tag.string.replace_with("No longer bold")
# <blockquote>No longer bold</blockquote>
tag
BeautifulSoup对象表示的是一个文档的全部内容,大多数时候可以把它当做Tag对象,因为BeautifulSoup对象并不是真正的HTML或XML的tag,所以没有name和attribute属性。
Tag,NavigableString,BeautifulSoup几乎覆盖了html和xml中的所有内容,但是还有一些特殊对象入文档的注释部分。Comment对象是一个特殊类型的NavigableString对象。
markup = "<b><!--Hey, buddy. Want to buy a used parser?--></b>"
soup = BeautifulSoup(markup)
comment = soup.b.string
'bs4.element.Comment'
type(comment)
Beautiful Soup应用示例相关推荐
- python修改html内容_详解Python利用Beautiful Soup模块修改内容示例代码
Beautiful Soup是一个可以从HTML或XML文件中提取数据的Python 库.它能够通过你喜欢的转换器实现惯用的文档导航.查找.修改文档的方式.他还能够修改HTML/XML文档的内容.这篇 ...
- python beautifulsoup抓取网页内容_利用Python和Beautiful Soup抓取网页内容
利用Python和Beautiful Soup抓取网页内容 Posted on 2012-08-09 00:08 SamWei 阅读(381) 评论(1) 编辑 收藏 Python 3中提供了url打 ...
- Python 网络爬虫笔记3 -- Beautiful Soup库
Python 网络爬虫笔记3 – Beautiful Soup库 Python 网络爬虫系列笔记是笔者在学习嵩天老师的<Python网络爬虫与信息提取>课程及笔者实践网络爬虫的笔记. 课程 ...
- 可爱的 Python: 使用 mechanize 和 Beautiful Soup 轻松收集 Web 数据
可爱的 Python: 使用 mechanize 和 Beautiful Soup 轻松收集 Web 数据 使用 Python 工具简化 Web 站点数据的提取和组织 David Mertz, Ph. ...
- 两万字教会你解析库之Beautiful Soup
目录 1.简介 2.准备工作 3.解析器 4.基本用法 5.节点选择器 5.1选择元素 5.2提取信息 5.3嵌套选择 5.4关联选择 6.方法选择器 7. css 选择器 7.1 嵌套选择 7.2 ...
- python网络爬虫学习笔记(九):Beautiful Soup的使用
文章目录 1.基本用法 2.节点选择器 2.1 获取属性和名称 2.2 获取内容 (1)子节点和子孙节点 (2)父节点和祖先节点 (3)兄弟节点 3.方法选择器 4.CSS选择器 Beautiful ...
- python beautifulsoup_Python爬虫利器:Beautiful Soup的使用(一)
上一次的爬取网易新闻案例,我们使用到了一个解析 HTML 的库:Beautiful Soup.本次跟大家分享一下关于这个库的一些用法. Beautiful Soup 简介: Beautiful Sou ...
- 爬虫第二讲:Beautiful Soup库
第二讲 Beautiful Soup库 一.Beautiful Soup库基础 1.示例引入 #首先爬取下页面 >>>import requests >>>r = ...
- Beautiful Soup 基础入门(实验楼学习笔记2)
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言 知识点 一.Beautiful Soup 简介 二.获取 HTML 页面 获取世界大学排名的页面信息 三.解析 HTM ...
最新文章
- Apache Kafka-max.poll.interval.ms参数含义说明
- 年度迷惑新闻:美女其实是个男生?
- codevs 1907 方格取数 3
- ApacheCN DevOps 译文集(二)20211230 更新
- 使用Struts2 验证框架,验证信息重复多次出现
- pat编程语言_浙江大学在线pat题库集合
- 分析Android未来几年的发展前景,分享PDF高清版
- vb mysql 查询_VB数据库记录查询四法
- 用计算机运行搜索Ip的方法,怎样查ip地址 几种查ip地址的方法【图文】
- 读书笔记 摘自:《智能商业》
- python地理位置聚类_python实现地理位置的聚类
- 光纤跳线接口_综合布线与弱电工程:跳线、尾纤、光纤接口,一文讲明白
- 2017年最新苹果开发者账号注册申请流程最强详解!
- 洛谷试炼场 动态规划TG.lv(2)
- 十五、IO流【黑马JavaSE笔记】(本文文中记录了个人学习感受)
- 【机器学习】专题学习丨1. 损失函数loss积累丨
- 实用最优化方法课后习题-第二章
- arduino用2个74HC595点亮2个4位共阳数码管
- FT2000+ PBF编译手册
- 【微信小程序】—— 如何在app.js 和其他页面中更改globalData的值
热门文章
- 拖拽式可视化设计,打造高效流程管理体系
- {:0>5d} python format占位输出
- 【自我成长网站收集】
- Apache commons-codec包的基本使用
- 昨天去看了电影-《达芬奇密码》
- html页面获取宽和高
- X-Pool:多伦多大学提出基于文本的视频聚合方式,在视频文本检索上达到SOTA性能!(CVPR 2022)...
- 甲骨文30亿美元收购绩效管理软件商海波龙
- (zt)武林外传的经典台词系列1
- 智慧校园下“企业微信+CAS”的统一身份认证方案设计