前面咱们已经将正文内容获取出来了,其实到这里已经能够完成这个实例的要求了,可是我在结果中发现一些乱入的字符html
就是这些红色框框圈出来的符号,原本这是不影响使用的,但对于轻微强迫症的我来讲,这实在是有点不爽,因此我要想办法将这些烦人的小符号去掉。python
首先,经过对源码的分析,我发现这些符号表明的是一个连接程序员
<h1>快速开始<a class="headerlink" href="#id4" title="永久连接至标题">¶</a></h1> <h1>安装 Beautiful Soup<a class="headerlink" href="#id5" title="永久连接至标题">¶</a></h1>
首先,这是一个<h1>标签,表明的是标题,我固然不能把这部分给删除了,<h1>标签里面包含<a>标签,并且它们的属性都是同样的,class="headerlink",因此我如今的作法应该是只删除<h1>标签里面带有 class="headerlink" 的<a>标签,BS4中有没有能实现这个功能的函数呢?函数
clear()
clear() 方法移除当前tag的内容:
extract()
extract() 方法将当前tag移除文档树,并做为方法结果返回:
decompose()
decompose() 方法将当前节点移除文档树并彻底销毁:网站
这就是传说中BS4的删除三兄弟,理论上,这三个方法应该都是能够实现咱们的功能的,既然要用到这几个功能,咱们就来看看它们的用法和区别,为了方便统一说明,我这里直接在一段代码中实现使用和对比code
#!/usr/bin/env python # -*- coding:UTF-8 -*- __author__ = '217小月月坑' ''' BS4删除三兄弟对比 ''' from bs4 import BeautifulSoup # clear() 方法移除当前tag的内容: markup = '<a href="http://example.com/">I linked to <i>example.com</i></a>' soup = BeautifulSoup(markup) a_clear = soup.a i_clear = soup.i.clear() # extract() 方法将当前tag移除文档树,并做为方法结果返回 markup = '<a href="http://example.com/">I linked to <i>example.com</i></a>' soup = BeautifulSoup(markup) a_extract = soup.a i_extract = soup.i.extract() # decompose() 方法将当前节点移除文档树并彻底销毁 markup = '<a href="http://example.com/">I linked to <i>example.com</i></a>' soup = BeautifulSoup(markup) a_decompose = soup.a i_decompose = soup.i.decompose() # 输出 print a_clear # <a href="http://example.com/">I linked to <i></i></a> print i_clear # None print a_extract # <a href="http://example.com/">I linked to </a> print i_extract # <i>example.com</i> print a_decompose # <a href="http://example.com/">I linked to </a> print i_decompose # None
结果分析:htm
首先先说a_*,这个变量显示的是使用三种方法后原来的字符串变成什么样子,首先,clear 的结果中还保留有<i></i>,而它的函数功能的描述是移除tag的内容,结果也是和它的描述相符合的,只是移除了tag的内容,它的标签并无被移除,而extract 和 decompose 方法是移除当前tag的文档树,因此它们两个的a_*输出中并无<i></i>文档
i_* 是执行函数的返回值,也就是说,执行这些方法以后,会不会将删除的东西返回,更直白的理解是能不能看到删除了什么东西。其中只有extract方法的说明中提到有返回值,这里输出的结果中也能够体现字符串
删除三兄弟的用法和区别就简单讲到这里,咱们如今关注的主要问题应该是,怎么在咱们抠出来的正文的代码块中将含有class="headerlink" 属性的标签删除源码
啊,这里真的是,接着讲的话又太长,转到下一小节的话又显得我有点短小,因此我决定在这里聊点别的
最近经同事介绍发现了一个颇有价值的网站:stackoverflow ,中文名叫堆栈溢出,不过我更喜欢它的另外一个名字,爆栈,这是国外的一个专门的程序员论坛,你能够到上面提问也能够回答问题,说实话,对于技术这方面的东西,我仍是比较承认老外的,因此,常常去上面逛的话,应该会有不少的收获,可是有一些很差的方面就是这个网站加载得真的很慢,并且所有都是英文的,反正大不了也恰好练练本身的 poor english
好了,收拾收拾,准备进入下一小节去解决咱们的问题