博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
python-72:BS4中的clear(),extract(),decompose()
阅读量:7243 次
发布时间:2019-06-29

本文共 2132 字,大约阅读时间需要 7 分钟。

hot3.png

前面我们已经将正文内容获取出来了,其实到这里已经可以完成这个实例的要求了,但是我在结果中发现一些乱入的字符

093900_9xOB_2429887.png

就是这些红色框框圈出来的符号,本来这是不影响使用的,但对于轻微强迫症的我来说,这实在是有点不爽,所以我要想办法将这些烦人的小符号去掉。

首先,通过对源码的分析,我发现这些符号代表的是一个链接

快速开始

安装 Beautiful Soup

首先,这是一个<h1>标签,代表的是标题,我当然不能把这部分给删除了,<h1>标签里面包含<a>标签,而且它们的属性都是一样的,class="headerlink",所以我现在的做法应该是只删除<h1>标签里面带有 class="headerlink" 的<a>标签,BS4中有没有能实现这个功能的函数呢?

clear()

clear() 方法移除当前tag的内容:
extract()
extract() 方法将当前tag移除文档树,并作为方法结果返回:
decompose()
decompose() 方法将当前节点移除文档树并完全销毁:

这就是传说中BS4的删除三兄弟,理论上,这三个方法应该都是可以实现我们的功能的,既然要用到这几个功能,我们就来看看它们的用法和区别,为了方便统一说明,我这里直接在一段代码中实现使用和对比

#!/usr/bin/env python# -*- coding:UTF-8 -*-__author__ = '217小月月坑''''BS4删除三兄弟对比'''from bs4 import BeautifulSoup# clear() 方法移除当前tag的内容:markup = '
I linked to 
example.com'soup = BeautifulSoup(markup)a_clear = soup.ai_clear = soup.i.clear()# extract() 方法将当前tag移除文档树,并作为方法结果返回markup = '
I linked to 
example.com'soup = BeautifulSoup(markup)a_extract = soup.ai_extract = soup.i.extract()# decompose() 方法将当前节点移除文档树并完全销毁markup = '
I linked to 
example.com'soup = BeautifulSoup(markup)a_decompose = soup.ai_decompose = soup.i.decompose()# 输出print a_clear         # 
I linked to 
print i_clear         # Noneprint a_extract       # 
I linked to print i_extract       # 
example.comprint a_decompose     # 
I linked to print i_decompose     # None

结果分析:

首先先说a_*,这个变量显示的是使用三种方法后原来的字符串变成什么样子,首先,clear 的结果中还保留有<i></i>,而它的函数功能的描述是移除tag的内容,结果也是和它的描述相符合的,只是移除了tag的内容,它的标签并没有被移除,而extract 和 decompose 方法是移除当前tag的文档树,所以它们两个的a_*输出中并没有<i></i>

i_* 是执行函数的返回值,也就是说,执行这些方法之后,会不会将删除的东西返回,更直白的理解是能不能看到删除了什么东西。其中只有extract方法的说明中提到有返回值,这里输出的结果中也可以体现

删除三兄弟的用法和区别就简单讲到这里,我们现在关注的主要问题应该是,怎么在我们抠出来的正文的代码块中将含有class="headerlink" 属性的标签删除

啊,这里真的是,接着讲的话又太长,转到下一小节的话又显得我有点短小,所以我决定在这里聊点别的

最近经同事介绍发现了一个很有价值的网站:stackoverflow ,中文名叫堆栈溢出,不过我更喜欢它的另一个名字,爆栈,这是国外的一个专门的程序员论坛,你可以到上面提问也可以回答问题,说实话,对于技术这方面的东西,我还是比较认可老外的,所以,经常去上面逛的话,应该会有很多的收获,但是有一些不好的方面就是这个网站加载得真的很慢,而且全部都是英文的,反正大不了也刚好练练自己的 poor english

好了,收拾收拾,准备进入下一小节去解决我们的问题

转载于:https://my.oschina.net/u/2429887/blog/597121

你可能感兴趣的文章
RedHat 7配置HAProxy实现Web负载均衡
查看>>
rsync详解
查看>>
OSPF邻接关系建立
查看>>
液/气双通道散热数据中心团体标准正式启动编制
查看>>
nginx重定向设置
查看>>
使用Mkfifo和Script命令实现在Linux平台上实时演示
查看>>
dns资源记录类型等
查看>>
cacti-0.8.7g的安装
查看>>
如何做到人均利润超过阿里巴巴?7-eleven的互联网思维
查看>>
Linux系统使用普通命令删除不掉的文件处理方法
查看>>
算法学习之路|人口普查
查看>>
canon iPF 系列保养墨盒清零方法
查看>>
kubernetes1.9离线部署
查看>>
Emulating Neural Synapses through AI
查看>>
Oracle in与exists语句
查看>>
pt-kill
查看>>
Django启停操作脚本
查看>>
cisco之VTP
查看>>
python的安装
查看>>
搭建PXE网络实现远程装机服务
查看>>