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 相关文章推荐
跟老齐学Python之有容乃大的list(1)
Sep 14 Python
Python使用百度API上传文件到百度网盘代码分享
Nov 08 Python
python如何通过protobuf实现rpc
Mar 06 Python
详解python中asyncio模块
Mar 03 Python
分分钟入门python语言
Mar 20 Python
Python生成短uuid的方法实例详解
May 29 Python
Django框架会话技术实例分析【Cookie与Session】
May 24 Python
PyQt5图形界面播放音乐的实例
Jun 17 Python
pytorch加载自己的图像数据集实例
Jul 07 Python
Python读取yaml文件的详细教程
Jul 21 Python
python中使用asyncio实现异步IO实例分析
Feb 26 Python
Pytorch中Softmax和LogSoftmax的使用详解
Jun 05 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
PHP使用zlib扩展实现GZIP压缩输出的方法详解
2018/04/09 PHP
Aster vs Newbee BO3 第二场2.18
2021/03/10 DOTA
一个简单的网站访问JS计数器 刷新1次加1次访问
2012/09/20 Javascript
jquery 实现两Select 标签项互调示例代码
2014/09/25 Javascript
解决js页面滚动效果scrollTop在FireFox与Chrome浏览器间的兼容问题的方法
2015/12/03 Javascript
JS制作图形验证码实现代码
2020/10/19 Javascript
jQuery插件Echarts实现的渐变色柱状图
2017/03/23 jQuery
AngularJS基于provider实现全局变量的读取和赋值方法
2017/06/28 Javascript
js+html5生成自动排列对话框实例
2017/10/09 Javascript
JavaScript实现图片懒加载的方法分析
2018/07/05 Javascript
开发一个Parcel-vue脚手架工具(详细步骤)
2018/09/22 Javascript
其实你可以少写点if else与switch(推荐)
2019/01/10 Javascript
小程序封装路由文件和路由方法(5种全解析)
2019/05/26 Javascript
[05:22]DOTA2 2015国际邀请赛中国区预选赛首日TOP10
2015/05/26 DOTA
python 多线程应用介绍
2012/12/19 Python
python字符串的常用操作方法小结
2016/05/21 Python
浅谈Python类里的__init__方法函数,Python类的构造函数
2016/12/10 Python
浅谈配置OpenCV3 + Python3的简易方法(macOS)
2018/04/02 Python
Python设置在shell脚本中自动补全功能的方法
2018/06/25 Python
对python中的乘法dot和对应分量相乘multiply详解
2018/11/14 Python
基于Python的PIL库学习详解
2019/05/10 Python
Django MEDIA的配置及用法详解
2019/07/25 Python
python实现一个函数版的名片管理系统过程解析
2019/08/27 Python
Pytorch 神经网络—自定义数据集上实现教程
2020/01/07 Python
python 5个顶级异步框架推荐
2020/09/09 Python
python 实现全球IP归属地查询工具
2020/12/18 Python
英国家庭、花园、汽车和移动解决方案:Easylife Group
2018/05/23 全球购物
美国孩之宝玩具官网:Hasbro Pulse
2019/06/24 全球购物
Shopee菲律宾:在线购买和出售
2019/11/25 全球购物
外企C语言笔试题
2013/11/10 面试题
测绘工程本科生求职信
2013/10/10 职场文书
毕业生就业自荐书
2013/12/15 职场文书
自我反省检讨书
2014/01/23 职场文书
研发工程师岗位职责
2014/04/28 职场文书
2014年话务员工作总结
2014/11/19 职场文书
Python利用capstone实现反汇编
2022/04/06 Python