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垃圾回收机制
Feb 12 Python
Python使用装饰器进行django开发实例代码
Feb 06 Python
PyTorch读取Cifar数据集并显示图片的实例讲解
Jul 27 Python
Python3爬楼梯算法示例
Mar 04 Python
python打包exe开机自动启动的实例(windows)
Jun 28 Python
Python模块汇总(常用第三方库)
Oct 07 Python
Python脚本导出为exe程序的方法
Mar 25 Python
Python flask框架如何显示图像到web页面
Jun 03 Python
python能在浏览器能运行吗
Jun 17 Python
keras做CNN的训练误差loss的下降操作
Jun 22 Python
Python3如何使用tabulate打印数据
Sep 25 Python
python tqdm库的使用
Nov 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
PHP运行出现Notice : Use of undefined constant 的完美解决方案分享
2012/03/05 PHP
php使用APC实现实时上传进度条功能
2015/10/26 PHP
php app支付宝回调(异步通知)详解
2018/07/25 PHP
laravel框架 api自定义全局异常处理方法
2019/10/11 PHP
详解PHP中的8个魔术常量
2020/07/06 PHP
jquery form 隐藏的input 选择
2014/04/29 Javascript
Extjs Label的 fieldLabel和html属性值对齐的方法
2014/06/15 Javascript
24款热门实用的jQuery插件推荐
2014/12/24 Javascript
JS实现带缓冲效果打开、关闭、移动一个层的方法
2015/05/09 Javascript
js实现的简洁网页滑动tab菜单效果代码
2015/08/24 Javascript
JS+CSS实现DIV层的展开、收缩效果
2016/01/28 Javascript
原生JavaScript实现Ajax的方法
2016/04/07 Javascript
详解AngularJS 路由 resolve用法
2017/04/24 Javascript
微信小程序request出现400的问题解决办法
2017/05/23 Javascript
jquery实现简单实用的轮播器
2017/05/23 jQuery
vue完成项目后,打包成静态文件的方法
2018/09/03 Javascript
使用ESLint禁止项目导入特定模块的方法步骤
2019/03/04 Javascript
vue中实现弹出层动画效果的示例代码
2020/09/25 Javascript
[01:07:53]RNG vs VG 2019国际邀请赛小组赛 BO2 第一场 8.15
2019/08/17 DOTA
pandas.dataframe按行索引表达式选取方法
2018/10/30 Python
python 实现UTC时间加减的方法
2018/12/31 Python
Python+opencv 实现图片文字的分割的方法示例
2019/07/04 Python
python使用html2text库实现从HTML转markdown的方法详解
2020/02/21 Python
python json.dumps中文乱码问题解决
2020/04/01 Python
python与idea的集成的实现
2020/11/20 Python
Pytorch之扩充tensor的操作
2021/03/04 Python
struct与class的区别
2014/02/03 面试题
采购部岗位职责
2013/11/24 职场文书
小学生获奖感言范文
2014/02/02 职场文书
党建工作先进材料
2014/05/02 职场文书
2015大学迎新标语
2015/07/16 职场文书
优质护理心得体会
2016/01/22 职场文书
2019消防宣传标语!
2019/07/10 职场文书
pytorch 权重weight 与 梯度grad 可视化操作
2021/06/05 Python
详解Spring Boot使用系统参数表提升系统的灵活性
2021/06/30 Java/Android
ORACLE中dbms_output.put_line输出问题的解决过程
2022/06/28 Oracle