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的ORM框架中的SQLAlchemy库的映射关系
Apr 25 Python
python对数组进行反转的方法
May 20 Python
Python面向对象class类属性及子类用法分析
Feb 02 Python
python实现远程控制电脑
May 23 Python
Python获取时间范围内日期列表和周列表的函数
Aug 05 Python
Python networkx包的实现
Feb 14 Python
Anaconda和ipython环境适配的实现
Apr 22 Python
解决在keras中使用model.save()函数保存模型失败的问题
May 21 Python
torchxrayvision包安装过程(附pytorch1.6cpu版安装)
Aug 26 Python
python实现无边框进度条的实例代码
Dec 30 Python
python实现简单反弹球游戏
Apr 12 Python
python实现简易自习室座位预约系统
Jun 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
PHP5下$_SERVER变量不再受magic_quotes_gpc保护的弥补方法
2012/10/31 PHP
php调用新浪短链接API的方法
2014/11/08 PHP
微信支付PHP SDK之微信公众号支付代码详解
2015/12/09 PHP
借用Google的Javascript API Loader来加速你的网站
2009/01/28 Javascript
javascript中删除指定数组中指定的元素的代码
2011/02/12 Javascript
Javascript模块化编程(一)模块的写法最佳实践
2013/01/17 Javascript
JS+CSS设置img在DIV中只显示Img垂直居中的部分
2013/10/24 Javascript
Javascript动态创建div的方法
2015/02/09 Javascript
javascript实现英文首字母大写
2015/04/23 Javascript
jQuery实现滚动鼠标放大缩小图片的方法(附demo源码下载)
2016/03/05 Javascript
JavaScript制作简单的日历效果
2016/03/10 Javascript
AngularJS学习第一篇 AngularJS基础知识
2017/02/13 Javascript
Angular实现购物车计算示例代码
2017/02/21 Javascript
nodejs搭建本地服务器并访问文件的方法
2017/03/03 NodeJs
BootStrap+Mybatis框架下实现表单提交数据重复验证
2017/03/23 Javascript
Vue原理剖析 实现双向绑定MVVM
2017/05/03 Javascript
angular写一个列表的选择全选交互组件的示例
2018/01/22 Javascript
Vue 中的compile操作方法
2018/02/26 Javascript
node.js ws模块搭建websocket服务端的方法示例
2019/04/25 Javascript
vxe-table vue table 表格组件功能
2019/05/26 Javascript
JS模拟浏览器实现全局搜索功能
2019/09/11 Javascript
react MPA 多页配置详解
2019/10/18 Javascript
js实现的订阅发布者模式简单示例
2020/03/14 Javascript
Vue js with语句原理及用法解析
2020/09/03 Javascript
[04:26]2014DOTA2西雅图国际邀请赛 总决赛TOPPLAY
2014/07/22 DOTA
使用Python神器对付12306变态验证码
2016/01/05 Python
在Linux命令行终端中使用python的简单方法(推荐)
2017/01/23 Python
python使用筛选法计算小于给定数字的所有素数
2018/03/19 Python
Python使用Numpy模块读取文件并绘制图片
2020/05/13 Python
python爬取”顶点小说网“《纯阳剑尊》的示例代码
2020/10/16 Python
英国高档时尚男装购物网站:MR PORTER
2016/08/09 全球购物
大学优秀班集体申报材料
2014/05/23 职场文书
2015年度对口支援工作总结
2015/07/22 职场文书
Python进度条的使用
2021/05/17 Python
再谈python_tkinter弹出对话框创建
2022/03/20 Python
TypeScript实用技巧 Nominal Typing名义类型详解
2022/09/23 Javascript