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使用htmllib分析网页内容的方法
May 08 Python
Python统计文件中去重后uuid个数的方法
Jul 30 Python
Python中文件I/O高效操作处理的技巧分享
Feb 04 Python
Python实现图片转字符画的示例代码
Aug 21 Python
python实现requests发送/上传多个文件的示例
Jun 04 Python
如何利用Python分析出微信朋友男女统计图
Jan 25 Python
Python Pandas 获取列匹配特定值的行的索引问题
Jul 01 Python
Django高级编程之自定义Field实现多语言
Jul 02 Python
Python爬虫实现的根据分类爬取豆瓣电影信息功能示例
Sep 15 Python
浅谈Python描述数据结构之KMP篇
Sep 06 Python
python+excel接口自动化获取token并作为请求参数进行传参操作
Nov 10 Python
基于OpenCV的网络实时视频流传输的实现
Nov 15 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
晶体管单管来复再生式收音机
2021/03/02 无线电
点评山进PR-D3L三波段收音机
2021/03/02 无线电
数据库相关问题
2006/10/09 PHP
php 文件上传代码(限制jpg文件)
2010/01/05 PHP
PHP中Header使用的HTTP协议及常用方法小结
2014/11/04 PHP
PDO::query讲解
2019/01/29 PHP
[原创]保存的js无法执行的解决办法
2007/02/25 Javascript
jQuery插件 selectToSelect使用方法
2013/10/02 Javascript
JavaScript实现的浮动层框架用法实例分析
2015/10/10 Javascript
jQuery删除节点用法示例(remove方法)
2016/09/08 Javascript
javascript中活灵活现的Array对象详解
2016/11/30 Javascript
通过vue写一个瀑布流插件代码实例
2019/09/07 Javascript
layer弹出层扩展主题的方法
2019/09/11 Javascript
js实现表格数据搜索
2020/08/09 Javascript
vue 使用饿了么UI仿写teambition的筛选功能
2021/03/01 Vue.js
[01:08:48]LGD vs OG 2018国际邀请赛淘汰赛BO3 第三场 8.25
2018/08/29 DOTA
Python常见文件操作的函数示例代码
2011/11/15 Python
Python实现的检测web服务器健康状况的小程序
2014/09/17 Python
python统计文本文件内单词数量的方法
2015/05/30 Python
用Python删除本地目录下某一时间点之前创建的所有文件的实例
2017/12/14 Python
python3 面向对象__类的内置属性与方法的实例代码
2018/11/09 Python
树莓派动作捕捉抓拍存储图像脚本
2019/06/22 Python
python软件都是免费的吗
2020/06/18 Python
python实现斗地主分牌洗牌
2020/06/22 Python
突袭HTML5之Javascript API扩展3—本地存储全新体验
2013/01/31 HTML / CSS
匈牙利墨盒和碳粉购买网站:CDRmarket
2018/04/14 全球购物
Black Halo官方网站:购买连衣裙、礼服和连体裤
2018/06/13 全球购物
SQL数据库笔试题
2016/03/08 面试题
幼儿园小班植树节活动方案
2014/03/04 职场文书
高中生期中考试失利检讨书
2014/10/23 职场文书
会议主持词通用版
2019/04/02 职场文书
MySQL 使用SQL语句修改表名的实现
2021/04/07 MySQL
springBoot基于webSocket实现扫码登录
2021/06/22 Java/Android
python周期任务调度工具Schedule使用详解
2021/11/23 Python
SpringBoot2零基础到精通之数据与页面响应
2022/03/22 Java/Android
CSS 实现磨砂玻璃(毛玻璃)效果样式
2023/05/21 HTML / CSS