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写的一个文本编辑器
Jan 23 Python
python调用短信猫控件实现发短信功能实例
Jul 04 Python
Python读写Json涉及到中文的处理方法
Sep 12 Python
django将图片上传数据库后在前端显式的方法
May 25 Python
Python中反射和描述器总结
Sep 23 Python
Python 从列表中取值和取索引的方法
Dec 25 Python
Python实现的企业粉丝抽奖功能示例
Jul 26 Python
Python中socket网络通信是干嘛的
May 27 Python
Python实现一个简单的毕业生信息管理系统的示例代码
Jun 08 Python
Python依赖包迁移到断网环境操作
Jul 13 Python
python中Mako库实例用法
Dec 31 Python
Python 的演示平台支持 WSGI 接口的应用
Apr 20 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登录验证码的实现与使用方法
2016/07/07 PHP
详细解读php的命名空间(一)
2018/02/21 PHP
2020最新版 PhpStudy V8.1版本下载安装使用详解
2020/10/30 PHP
优秀js开源框架-jQuery使用手册(1)
2007/03/10 Javascript
js下获取div中的数据的原理分析
2010/04/07 Javascript
extjs grid设置某列背景颜色和字体颜色的方法
2010/09/03 Javascript
JQuery 绑定select标签的onchange事件,弹出选择的值,并实现跳转、传参
2011/01/06 Javascript
基于jQuery实现的水平和垂直居中的div窗口
2011/08/08 Javascript
jquery插件制作 自增长输入框实现代码
2012/08/17 jQuery
jquery自动填充勾选框即把勾选框打上true
2014/03/24 Javascript
jQuery中[attribute]选择器用法实例
2014/12/31 Javascript
jQuery.Highcharts.js绘制柱状图饼状图曲线图
2015/03/14 Javascript
angular十大常见问题
2017/03/07 Javascript
vue.js todolist实现代码
2017/10/29 Javascript
vue项目中导入swiper插件的方法
2018/01/30 Javascript
JavaScript闭包原理与用法实例分析
2018/08/10 Javascript
微信小程序实现吸顶特效
2020/01/08 Javascript
[31:47]夜魇凡尔赛茶话会 第三期01:选手知多少
2021/03/11 DOTA
Python操作SQLite简明教程
2014/07/10 Python
python3生成随机数实例
2014/10/20 Python
Python可跨平台实现获取按键的方法
2015/03/05 Python
详解Python中time()方法的使用的教程
2015/05/22 Python
python3中int(整型)的使用教程
2017/03/23 Python
Ubuntu下使用Python实现游戏制作中的切分图片功能
2018/03/30 Python
TensorFlow实现随机训练和批量训练的方法
2018/04/28 Python
Python实现读取txt文件中的数据并绘制出图形操作示例
2019/02/26 Python
python爬虫基础之urllib的使用
2020/12/31 Python
Hertz荷兰:荷兰和全球租车
2018/01/07 全球购物
英国休闲奢华的缩影:Crew Clothing
2019/05/05 全球购物
linux面试题参考答案(6)
2014/08/29 面试题
小学开学标语
2014/07/01 职场文书
爱心募捐感谢信
2015/01/22 职场文书
委托公证书格式
2015/01/26 职场文书
自主招生英文自荐信
2015/03/25 职场文书
百年校庆感言
2015/08/01 职场文书
学会感恩主题班会
2015/08/12 职场文书