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批量生成任意尺寸的图片
Aug 29 Python
ubuntu系统下 python链接mysql数据库的方法
Jan 09 Python
Python时间戳使用和相互转换详解
Dec 11 Python
rabbitmq(中间消息代理)在python中的使用详解
Dec 14 Python
python使用Tesseract库识别验证
Mar 21 Python
python 利用pandas将arff文件转csv文件的方法
Feb 12 Python
python实现递归查找某个路径下所有文件中的中文字符
Aug 31 Python
Django框架模板用法入门教程
Nov 04 Python
python函数装饰器之带参数的函数和带参数的装饰器用法示例
Nov 06 Python
使用Tensorflow将自己的数据分割成batch训练实例
Jan 20 Python
Python实现从N个数中找到最大的K个数
Apr 02 Python
Python如何利用pandas读取csv数据并绘图
Jul 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
PHP读取数据库并按照中文名称进行排序实现代码
2013/01/29 PHP
php获取本地图片文件并生成xml文件输出具体思路
2013/04/27 PHP
CI框架常用方法小结
2016/05/17 PHP
PDO::setAttribute讲解
2019/01/29 PHP
javascript与cookie 的问题详解
2013/11/11 Javascript
Jquery创建一个层当鼠标移动到层上面不消失效果
2013/12/12 Javascript
一个仿糯米弹框效果demo
2014/07/22 Javascript
jQuery CSS()方法改变现有的CSS样式
2014/08/20 Javascript
javascript记录文本框内文字个数检测文字个数变化
2014/10/14 Javascript
JavaScript知识点总结(六)之JavaScript判断变量数据类型
2016/05/31 Javascript
Bootstrap前端开发案例一
2016/06/17 Javascript
AngularJS内建服务$location及其功能详解
2016/07/01 Javascript
jQuery与JavaScript节点创建方法的对比
2016/11/18 Javascript
Vue.js第一天学习笔记(数据的双向绑定、常用指令)
2016/12/01 Javascript
SpringMVC+bootstrap table实例详解
2017/06/02 Javascript
JS实现数组去重,显示重复元素及个数的方法示例
2019/01/21 Javascript
js实现图片推拉门效果代码实例
2019/05/18 Javascript
Vue如何获取数据列表展示
2019/12/11 Javascript
javascript-hashchange事件和历史状态管理实例分析
2020/04/18 Javascript
js动态生成表格(节点操作)
2021/01/12 Javascript
python文件读写操作与linux shell变量命令交互执行的方法
2015/01/14 Python
Python实现变量数值交换及判断数组是否含有某个元素的方法
2017/09/18 Python
python中使用iterrows()对dataframe进行遍历的实例
2018/06/09 Python
pandas.read_csv参数详解(小结)
2019/06/21 Python
Python猴子补丁Monkey Patch用法实例解析
2020/03/23 Python
详解使用Python写一个向数据库填充数据的小工具(推荐)
2020/09/11 Python
python 代码运行时间获取方式详解
2020/09/18 Python
生物化工工艺专业应届生求职信
2013/10/08 职场文书
校园十大歌手策划书
2014/02/01 职场文书
数控技术专业毕业自荐书范文
2014/02/05 职场文书
义务教育学校标准化建设汇报材料
2014/08/16 职场文书
软弱涣散基层党组织整改方案
2014/10/25 职场文书
交通安全月活动总结
2015/05/08 职场文书
党支部评议意见
2015/06/02 职场文书
寻找最美乡村教师观后感
2015/06/18 职场文书
MySQL库表名大小写的选择
2021/06/05 MySQL