Python利用Beautiful Soup模块修改内容方法示例


Posted in Python onMarch 27, 2017

前言

其实Beautiful Soup 模块除了能够搜索和导航之外,还能够修改 HTML/XML 文档的内容。这就意味着能够添加或删除标签、修改标签名称、改变标签属性值和修改文本内容等等。这篇文章非常详细的给大家介绍了Python利用Beautiful Soup模块修改内容的方法,下面话不多说,来看看详细的介绍吧。

修改标签

使用的示例 HTML 文档还是如下:

html_markup="""
 <div class="ecopyramid">
 <ul id="producers">
  <li class="producerlist">
  <div class="name">plants</div>
  <div class="number">100000</div>
  </li>
  <li class="producerlist">
  <div class="name">algae</div>
  <div class="number">100000</div>
  </li>
 </ul>
 </div>
 """

修改标签名称

soup = BeautifulSoup(html_markup,'lxml')
producer_entries = soup.ul
print producer_entries.name
producer_entries.name = "div"
print producer_entries.prettify()

修改标签属性值

# 修改标签属性
# 更新标签现有的属性值
producer_entries['id'] = "producers_new_value"
print producer_entries.prettify()
# 标签添加新的属性值
producer_entries['class'] = "newclass"
print producer_entries.prettify()
# 删除标签属性值
del producer_entries['class']
print producer_entries.prettify()

添加新的标签

我们可以使用 new_tag 方法来生成一个新的标签,然后使用 append() insert()insert_after()insert_before()方法来将标签添加到 HTML 树中。

例如在上述的 HTML 文档的 ul 标签中添加一个 li 标签 。首先要生成新的 li 标签,然后将其插入到 HTML 树结构中 。并在 li 标签中插入相应的 div 标签。

# 添加新的标签
# new_tag 生成一个 tag 对象
new_li_tag = soup.new_tag("li")
# 标签对象添加属性的方法
new_atag = soup.new_tag("a",href="www.example.com" rel="external nofollow" )
new_li_tag.attrs = {'class':'producerlist'}
soup = BeautifulSoup(html_markup,'lxml')
producer_entries = soup.ul
# 使用 append() 方法添加到末尾
producer_entries.append(new_li_tag)
print producer_entries.prettify()
# 生成两个 div 标签,将其插入到 li 标签中
new_div_name_tag = soup.new_tag("div")
new_div_name_tag['class'] = "name"
new_div_number_tag = soup.new_tag("div")
new_div_number_tag["class"] = "number"
# 使用 insert() 方法指定位置插入
new_li_tag.insert(0,new_div_name_tag)
new_li_tag.insert(1,new_div_number_tag)
print new_li_tag.prettify()

修改字符串内容

修改字符串内容可以使用 new_string()  、append()insert() 方法。

# 修改字符串内容
# 使用 .string 属性修改字符串内容
new_div_name_tag.string = 'new_div_name'
# 使用 .append() 方法添加字符串内容
new_div_name_tag.append("producer")
# 使用 soup 对象的 new_string() 方法生成字符串
new_string_toappend = soup.new_string("producer")
new_div_name_tag.append(new_string_toappend)
# 使用insert() 方法插入
new_string_toinsert = soup.new_string("10000")
new_div_number_tag.insert(0,new_string_toinsert)
print producer_entries.prettify()

删除标签节点

Beautiful Soup 模块提供了 decompose()extract() 方法来删除节点。

decompose() 方法删除节点,不仅会删除当前节点,还会把其子节点一块删除了。

extract() 方法用来从 HTML 树中删除节点或者字符串内容。

# 删除节点
third_producer = soup.find_all("li")[2]
# 使用 decompose() 方法删除 div 节点
div_name = third_producer.div
div_name.decompose()
print third_producer.prettify()
# 使用 extract() 方法删除节点
third_producer_removed = third_producer.extract()
print soup.prettify()

删除标签内容

标签可能有 NavigableString 对象或者 Tag 对象作为它的子节点,移除所有的这些子节点可以使用 clear() 方法。这将会移除标签的所有的 .content。

修改内容的其他方法

除了上面说到的方法,还有其他方法用来修改内容。

insert_after()insert_before() 方法

上面的两个方法能够在标签或者字符串的前面或者后面插入一个标签或者字符串。方法只能接收一个参数,要么是 NavigableString 对象要么是 Tag 对象。

replace_with() 方法

该方法是用一个新的标签或字符串内容替代原来的标签或者字符串,能够接收一个标签或者字符串作为输入。

wrap()unwrap() 方法

wrap() 方法是用另一个标签来包裹一个标签或者字符串。

unwrap() 方法则和 wrap() 方法相反。

# wrap()方法
li_tags = soup.find_all('li')
for li in li_tags:
 new_div_tag = soup.new_tag('div')
 li.wrap(new_div_tag)
print soup.prettify()
# unwrap()方法
li_tags = soup.find_all("li")
for li in li_tags:
 li.div.unwrap()
print soup.prettify()

总结

以上就是关于Python使用Beautiful Soup 模块修改内容的全部内容了,希望本文的内容对大家学习或者使用python能带来一定的帮助,如果有疑问大家可以留言交流,谢谢大家对三水点靠木的支持。

Python 相关文章推荐
pandas中Timestamp类用法详解
Dec 11 Python
Django框架验证码用法实例分析
May 10 Python
Python3 Tkinter选择路径功能的实现方法
Jun 14 Python
python 使用socket传输图片视频等文件的实现方式
Aug 07 Python
PYTHON发送邮件YAGMAIL的简单实现解析
Oct 28 Python
Pycharm创建项目时如何自动添加头部信息
Nov 14 Python
Python loguru日志库之高效输出控制台日志和日志记录
Mar 07 Python
Python多线程操作之互斥锁、递归锁、信号量、事件实例详解
Mar 24 Python
基于Keras的格式化输出Loss实现方式
Jun 17 Python
python把一个字符串切开的实例方法
Sep 27 Python
python 邮件检测工具mmpi的使用
Jan 04 Python
Python图像处理之膨胀与腐蚀的操作
Feb 07 Python
python递归查询菜单并转换成json实例
Mar 27 #Python
Python中的命令行参数解析工具之docopt详解
Mar 27 #Python
Python使用PDFMiner解析PDF代码实例
Mar 27 #Python
详解python并发获取snmp信息及性能测试
Mar 27 #Python
使用Python写CUDA程序的方法
Mar 27 #Python
pyenv命令管理多个Python版本
Mar 26 #Python
Django实现自定义404,500页面教程
Mar 26 #Python
You might like
在Windows系统上安装PHP运行环境文字教程
2010/07/19 PHP
php中error与exception的区别及应用
2014/07/28 PHP
初学JavaScript第二章
2008/09/30 Javascript
JS获取dom 对象 ajax操作 读写cookie函数
2009/11/18 Javascript
JavaScript改变HTML元素的样式改变CSS及元素属性
2013/11/12 Javascript
JS自调用匿名函数具体实现
2014/02/11 Javascript
React.js入门实例教程之创建hello world 的5种方式
2016/05/11 Javascript
Vuejs仿网易云音乐实现听歌及搜索功能
2017/03/30 Javascript
深入浅析Vue不同场景下组件间的数据交流
2017/08/15 Javascript
温故知新——JavaScript中的字符串连接问题最全总结(推荐)
2017/08/21 Javascript
详解vue-cil和webpack中本地静态图片的路径问题解决方案
2017/09/27 Javascript
js获取html页面代码中图片地址的实现代码
2018/03/05 Javascript
JS伪继承prototype实现方法示例
2018/06/20 Javascript
node 文件上传接口的转发的实现
2019/09/23 Javascript
mpvue微信小程序开发之实现一个弹幕评论
2019/11/24 Javascript
[01:32:50]DOTA2-DPC中国联赛 正赛 DLG vs XG BO3 第一场 1月25日
2021/03/11 DOTA
python冒泡排序算法的实现代码
2013/11/21 Python
深入理解Python单元测试unittest的使用示例
2017/11/18 Python
python实现NB-IoT模块远程控制
2018/06/20 Python
Python爬虫实现抓取京东店铺信息及下载图片功能示例
2018/08/07 Python
python使用matplotlib模块绘制多条折线图、散点图
2020/04/26 Python
Python3删除排序数组中重复项的方法分析
2019/01/31 Python
django框架基于模板 生成 excel(xls) 文件操作示例
2019/06/19 Python
Python3 main函数使用sys.argv传入多个参数的实现
2019/12/25 Python
Django配置跨域并开发测试接口
2020/11/04 Python
python使用requests库爬取拉勾网招聘信息的实现
2020/11/20 Python
Adobe Html5 Extension开发初体验图文教程
2017/11/14 HTML / CSS
英国最大的在线亚洲杂货店:Red Rickshaw
2020/03/22 全球购物
个人生活学习自我评价范文
2013/11/26 职场文书
土木工程个人自荐信范文
2013/11/30 职场文书
人力资源本科毕业生求职信
2014/06/04 职场文书
刑事附带民事起诉状
2015/05/19 职场文书
廉洁自律心得体会2016
2016/01/13 职场文书
PyTorch 如何设置随机数种子使结果可复现
2021/05/12 Python
Redis可视化客户端小结
2021/06/10 Redis
CSS+HTML 实现顶部导航栏功能
2021/08/30 HTML / CSS