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制作简单的钢琴程序的教程
Apr 01 Python
使用Python的web.py框架实现类似Django的ORM查询的教程
May 02 Python
Python操作串口的方法
Jun 17 Python
玩转python爬虫之正则表达式
Feb 17 Python
Python下实现的RSA加密/解密及签名/验证功能示例
Jul 17 Python
浅谈Scrapy网络爬虫框架的工作原理和数据采集
Feb 07 Python
利用python在大量数据文件下删除某一行的例子
Aug 21 Python
pygame库实现移动底座弹球小游戏
Apr 14 Python
Python 实现数组相减示例
Dec 27 Python
Python属性和内建属性实例解析
Jan 14 Python
Python+OpenCV实现图像的全景拼接
Mar 05 Python
Django+python服务器部署与环境部署教程详解
Mar 30 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
Laravel学习教程之本地化模块
2017/08/18 PHP
PHP基于自定义函数实现的汉字转拼音功能实例
2017/09/30 PHP
thinkPHP3.2.3结合Laypage实现的分页功能示例
2018/05/28 PHP
function, new function, new Function之间的区别
2007/03/08 Javascript
Javascript 两个窗体之间传值实现代码
2009/09/25 Javascript
js点击页面其它地方将某个显示的DIV隐藏
2012/07/12 Javascript
20条学习javascript的编程规范的建议
2014/11/28 Javascript
JS hashMap实例详解
2016/05/26 Javascript
JavaScript事件详细讲解
2016/06/27 Javascript
Bootstrap编写一个兼容主流浏览器的受众巨幕式风格页面
2016/07/01 Javascript
Bootstrap入门教程一Hello Bootstrap初识
2017/03/02 Javascript
js实现3D图片环展示效果
2017/03/09 Javascript
angular4实现tab栏切换的方法示例
2017/10/21 Javascript
最实用的JS数组函数整理
2017/12/05 Javascript
jQuery实现带进度条的轮播图
2020/09/13 jQuery
[39:21]LGD vs OG 2019国际邀请赛淘汰赛 胜者组 BO3 第二场 8.24
2019/09/10 DOTA
[52:26]完美世界DOTA2联赛决赛 FTD vs Phoenix 第一场 11.08
2020/11/11 DOTA
使用python装饰器验证配置文件示例
2014/02/24 Python
Windows下安装python2.7及科学计算套装
2015/03/05 Python
python optparse模块使用实例
2015/04/09 Python
python开发中range()函数用法实例分析
2015/11/12 Python
Python二叉树定义与遍历方法实例分析
2018/05/25 Python
Python爬取数据并写入MySQL数据库的实例
2018/06/21 Python
Python对象中__del__方法起作用的条件详解
2018/11/01 Python
CSS3实现可爱的小黄人动画
2016/07/11 HTML / CSS
详解html2canvas截图不能截取圆角图片的解决方案
2018/01/30 HTML / CSS
英国领先的亚洲旅游专家:Wendy Wu Tours
2018/01/21 全球购物
美国领先的男士和女士内衣购物网站:Freshpair
2019/02/25 全球购物
linux面试题参考答案(6)
2016/06/23 面试题
自主招生自荐信范文
2013/12/04 职场文书
快餐店的创业计划书范文
2014/01/29 职场文书
幼儿园中班教师寄语
2014/04/03 职场文书
书法兴趣小组活动总结
2014/07/07 职场文书
2014年人力资源工作总结
2014/11/19 职场文书
2015年元旦标语大全
2014/12/09 职场文书
redis数据一致性的实现示例
2022/03/18 Redis