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

  1. Beautiful Soup 4通过PyPi发布,可以通过pip安装。
pip install beautifulsoup4
  1. 安装解析器,Beautiful Soup支持python标准库中的HTML解析器,还支持一些第三方的解析器,比如lxml和html5lib。
pip install lxml
pip install html5lib
  1. 解析器对比
解析器 使用方法 优势 劣势
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格式的文档 速度慢,不依赖外部扩展
  1. 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种:TagNavigableStringBeautifulSoupComment

  1. 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)
  1. 可以遍历的字符串
# 字符串常被包含在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
  1. BeautifulSoup对象表示的是一个文档的全部内容,大多数时候可以把它当做Tag对象,因为BeautifulSoup对象并不是真正的HTML或XML的tag,所以没有name和attribute属性。

  2. 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应用示例相关推荐

  1. python修改html内容_详解Python利用Beautiful Soup模块修改内容示例代码

    Beautiful Soup是一个可以从HTML或XML文件中提取数据的Python 库.它能够通过你喜欢的转换器实现惯用的文档导航.查找.修改文档的方式.他还能够修改HTML/XML文档的内容.这篇 ...

  2. python beautifulsoup抓取网页内容_利用Python和Beautiful Soup抓取网页内容

    利用Python和Beautiful Soup抓取网页内容 Posted on 2012-08-09 00:08 SamWei 阅读(381) 评论(1) 编辑 收藏 Python 3中提供了url打 ...

  3. Python 网络爬虫笔记3 -- Beautiful Soup库

    Python 网络爬虫笔记3 – Beautiful Soup库 Python 网络爬虫系列笔记是笔者在学习嵩天老师的<Python网络爬虫与信息提取>课程及笔者实践网络爬虫的笔记. 课程 ...

  4. 可爱的 Python: 使用 mechanize 和 Beautiful Soup 轻松收集 Web 数据

    可爱的 Python: 使用 mechanize 和 Beautiful Soup 轻松收集 Web 数据 使用 Python 工具简化 Web 站点数据的提取和组织 David Mertz, Ph. ...

  5. 两万字教会你解析库之Beautiful Soup

    目录 1.简介 2.准备工作 3.解析器 4.基本用法 5.节点选择器 5.1选择元素 5.2提取信息 5.3嵌套选择 5.4关联选择 6.方法选择器 7. css 选择器 7.1 嵌套选择 7.2  ...

  6. python网络爬虫学习笔记(九):Beautiful Soup的使用

    文章目录 1.基本用法 2.节点选择器 2.1 获取属性和名称 2.2 获取内容 (1)子节点和子孙节点 (2)父节点和祖先节点 (3)兄弟节点 3.方法选择器 4.CSS选择器 Beautiful ...

  7. python beautifulsoup_Python爬虫利器:Beautiful Soup的使用(一)

    上一次的爬取网易新闻案例,我们使用到了一个解析 HTML 的库:Beautiful Soup.本次跟大家分享一下关于这个库的一些用法. Beautiful Soup 简介: Beautiful Sou ...

  8. 爬虫第二讲:Beautiful Soup库

    第二讲 Beautiful Soup库 一.Beautiful Soup库基础 1.示例引入 #首先爬取下页面 >>>import requests >>>r = ...

  9. Beautiful Soup 基础入门(实验楼学习笔记2)

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言 知识点 一.Beautiful Soup 简介 二.获取 HTML 页面 获取世界大学排名的页面信息 三.解析 HTM ...

最新文章

  1. Apache Kafka-max.poll.interval.ms参数含义说明
  2. 年度迷惑新闻:美女其实是个男生?
  3. codevs 1907 方格取数 3
  4. ApacheCN DevOps 译文集(二)20211230 更新
  5. 使用Struts2 验证框架,验证信息重复多次出现
  6. pat编程语言_浙江大学在线pat题库集合
  7. 分析Android未来几年的发展前景,分享PDF高清版
  8. vb mysql 查询_VB数据库记录查询四法
  9. 用计算机运行搜索Ip的方法,怎样查ip地址 几种查ip地址的方法【图文】
  10. 读书笔记 摘自:《智能商业》
  11. python地理位置聚类_python实现地理位置的聚类
  12. 光纤跳线接口_综合布线与弱电工程:跳线、尾纤、光纤接口,一文讲明白
  13. 2017年最新苹果开发者账号注册申请流程最强详解!
  14. 洛谷试炼场 动态规划TG.lv(2)
  15. 十五、IO流【黑马JavaSE笔记】(本文文中记录了个人学习感受)
  16. 【机器学习】专题学习丨1. 损失函数loss积累丨
  17. 实用最优化方法课后习题-第二章
  18. arduino用2个74HC595点亮2个4位共阳数码管
  19. FT2000+ PBF编译手册
  20. 【微信小程序】—— 如何在app.js 和其他页面中更改globalData的值

热门文章

  1. 拖拽式可视化设计,打造高效流程管理体系
  2. {:0>5d} python format占位输出
  3. 【自我成长网站收集】
  4. Apache commons-codec包的基本使用
  5. 昨天去看了电影-《达芬奇密码》
  6. html页面获取宽和高
  7. X-Pool:多伦多大学提出基于文本的视频聚合方式,在视频文本检索上达到SOTA性能!(CVPR 2022)...
  8. 甲骨文30亿美元收购绩效管理软件商海波龙
  9. (zt)武林外传的经典台词系列1
  10. 智慧校园下“企业微信+CAS”的统一身份认证方案设计