
还记得之前我们在第一个爬虫案例中使用过的 BeatifulSoup 吗?这节课我们就来正式学习一下 BeatifulSoup 这个页面提取工具,通过本节课的学习你会熟悉使用 BeatifulSoup 提取常见的网页元素。
使用 Requests 获取到页面源码后,我们需要一种工具来帮助我们结构化这些数据,从而方便我们检索需要的某个或者某些数据内容。BeautifulSoup 库就是这样一种工具,可以很方便我们对数据进行解析和数据的提取。
BeautifulSoup 的名字来源于大家耳熟能详的一部外国名著里面的小说,这部小说的名字叫做《爱丽丝梦游仙境》。从名字就可以看出,发明这个库的作者的目的是为了让使用这个库的人,心情舒畅,使用起来很方便舒适,接口简单人性化。
因为 BeautifulSoup 并不是 Python 内置的库,我们需要额外安装它。我们现在普遍使用的版本是 BeautifulSoup4, 简称作 bs4。
使用 pip 来安装 BeautifulSoup 很简单,打开 CMD 窗口运行下面这条命令:
安装成功后,如图所示:
解析器是一种帮我们结构化网页内容的工具,通过解析器,我们可以得到结构化的数据,而不是单纯的字符,方便我们解析和查找数据。
BeautifulSoup 的解析器有 htmlparse,html5lib,lxml 等。BeautifulSoup 本身支持的标准库是 htmlparse,html5lib。但是,lxml 的性能非常棒,以及拥有良好的容错能力,现在被广泛的使用。
解析器对比:
安装 lxml 和安装 BeautifulSoup 类似,同样只需一行命令就好:
安装成功后,如下所示:
BeautifulSoup 将 HTML 转换成树形结构,每个节点都是 Python 对象,所有对象可以归纳为 4 种:
下面我们一一来看下这四类对象:
下面我们就来具体使用一下 BeautifulSoup 这个解析工具,我们首先模仿 HTML 页面结构创建一个字符串:
工作中,我们一般经常的使用的方法就是 find_all 方法。但是,除了上述我们讲的 find_all 方法之外,BeautifulSoup 还有其他一些以 find 开头的方法,由于不是经常使用,这里就简单的列举一下,如果同学们感兴趣的话可以自己深入了解下。
Beautiful Soup 是一个可以从 HTML 或 XML 文件中提取数据的 Python 库,它提供了一些简单的 *** 作方式来帮助你处理文档导航,查找,修改文档等繁琐的工作。因为使用简单,所以 Beautiful Soup 会帮你节省不少的工作时间。
你可以使用如下命令安装 Beautiful Soup。二选一即可。
Beautiful Soup 不仅支持 Python 标准库中的 HTML 解析器,还支持很多第三方的解析器,比如 lxml,html5lib 等。初始化 Beautiful Soup 对象时如果不指定解析器,那么 Beautiful Soup 将会选择最合适的解析器(前提是你的机器安装了该解析器)来解析文档,当然你也可以手动指定解析器。这里推荐大家使用 lxml 解析器,功能强大,方便快捷,而且该解析器是唯一支持 XML 的解析器。
你可以使用如下命令来安装 lxml 解析器。二选一即可。
Beautiful Soup 使用来起来非常简单,你只需要传入一个文件 *** 作符或者一段文本即可得到一个构建完成的文档对象,有了该对象之后,就可以对该文档做一些我们想做的 *** 作了。而传入的文本大都是通过爬虫爬取过来的,所以 Beautiful Soup 和 requests 库结合使用体验更佳。
Beautiful Soup 将复杂的 HTML 文档转换成一个复杂的树形结构,每个节点都是 Python 对象,所有对象可以归纳为 4 种: Tag,NavigableString,BeautifulSoup,Comment。
Tag 就是 HTML 的一个标签,比如 p,p 标签等,也是我们用的最多的一个对象。
NavigableString 指标签内部的文字,直译就是可遍历的字符串。
BeautifulSoup 指一个文档的全部内容,可以当成一个 Tag 来处理。
Comment 是一个特殊的 NavigableString,其输出内容不包括注视内容。
为了故事的顺利发展,我们先定义一串 HTML 文本,下文的所有例子都是基于这段文本的。
Tag 有两个很重要的属性,name 和 attributes。期中 name 就是标签的名字,attributes 是标签属性。标签的名字和属性是可以被修改的,注意,这种修改会直接改变 BeautifulSoup 对象。
由以上例子我么可以看出,可以直接通过点属性的方法来获取 Tag,但是这种方法只能获取第一个标签。同时我们可以多次调用点属性这个方法,来获取更深层次的标签。
如果想获得所有的某个名字的标签,则可以使用 find_all(tag_name) 函数。
我们可以使用 contents 将 tag 以列表方式输出,即将 tag 的子节点格式化为列表,这很有用,意味着可以通过下标进行访问指定节点。同时我们还可以通过 children 生成器对节点的子节点进行遍历。
children 只可以获取 tag 的直接节点,而获取不到子孙节点,descendants 可以满足你。
通过 parent 属性获取标签的父亲节点。 title 的父标签是 head,html 的父标签是 BeautifulSoup 对象,而 BeautifulSoup 对象的父标签是 None。
同时,我们可以通过 parents 得到指定标签的所有父亲标签。
通过 next_sibling 和 previous_sibling 来获取下一个标签和上一个标签。
你可能会纳闷,调用了两次 next_sibling 怎么只有一个输出呢,这方法是不是有 bug 啊。事实上是 p 的第一个 next_sibling 是 p 和 p 之间的换行符 。这个规则对于 previous_sibling 同样适用。
另外,我们可以通过 next_siblings 和 previous_siblings 属性可以对当前节点的兄弟节点迭代输出。在该例子中,我们在每次输出前加了前缀,这样就可以更直观的看到 dib 的第一个 previous_sibling 是换行符了。
通过 next_element 和 previous_element 获取指定标签的前一个或者后一个被解析的对象,注意这个和兄弟节点是有所不同的,兄弟节点是指有相同父亲节点的子节点,而这个前一个或者后一个是按照文档的解析顺序来计算的。
比如在我们的文本 html_doc 中,head 的兄弟节点是 body(不考虑换行符),因为他们具有共同的父节点 html,但是 head 的下一个节点是 title。即 soupheadnext_sibling=title soupheadnext_element=title
同时这里还需要注意的是 title 下一个解析的标签不是 body,而是 title 标签内的内容,因为 html 的解析顺序是打开 title 标签,然后解析内容,最后关闭 title 标签。
另外,我们同样可以通过 next_elements 和 previous_elements 来迭代文档树。由遗下例子我们可以看出,换行符同样会占用解析顺序,与迭代兄弟节点效果一致。
本章节介绍了 Beautiful Soup 的使用场景以及 *** 作文档树节点的基本 *** 作,看似很多东西其实是有规律可循的,比如函数的命名,兄弟节点或者下一个节点的迭代函数都是获取单个节点函数的复数形式。
同时由于 HTML 或者 XML 这种循环嵌套的复杂文档结构,致使 *** 作起来甚是麻烦,掌握了本文对节点的基本 *** 作,将有助于提高你写爬虫程序的效率。
您好,Python可以使用多种方式来解析XHTML文档,其中最常用的方式是使用第三方库BeautifulSoup。BeautifulSoup是一个基于Python的HTML/XML解析器,它可以帮助开发者快速解析XHTML文档。
使用BeautifulSoup解析XHTML文档的步骤如下:
1 安装BeautifulSoup库。可以使用pip命令来安装:pip install beautifulsoup4。
2 导入BeautifulSoup库。在Python代码中使用from bs4 import BeautifulSoup语句导入库。
3 读取XHTML文档。使用Python的文件 *** 作函数打开文件,读取文件内容。
4 创建BeautifulSoup对象。使用BeautifulSoup类创建一个对象,传入读取的XHTML文档内容和解析器类型。
5 解析XHTML文档。使用BeautifulSoup对象的方法来解析XHTML文档,例如find、find_all等方法。
6 处理解析结果。根据解析结果来处理XHTML文档的内容,例如提取需要的信息、修改XHTML文档等。
总之,Python可以使用BeautifulSoup等第三方库来解析XHTML文档,这些库提供了简单易用的API,使得开发者可以快速解析和处理XHTML文档。
以上就是关于10《Python 原生爬虫教程》BeatifulSoup 的使用全部的内容,包括:10《Python 原生爬虫教程》BeatifulSoup 的使用、爬虫利器 Beautiful Soup 之遍历文档、python如何解析xhtml等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)