首页 >> 大全

内容提取神器 beautiful Soup 的用法

2023-12-06 大全 23 作者:考证青年

上篇文章只是简单讲述正则表达式如何读懂以及 re 常见的函数的用法。我们可能读懂别人的正则表达式,但是要自己写起正则表达式的话,可能会陷入如何写的困境。正则表达式写起来费劲又出错率高,那么有没有替代方案呢?俗话说得好,条条道路通罗马。目前还两种代替其的办法,一种是使用 Xpath 神器,另一种就是本文要讲的 。

1 简介

引用 官网的说明:

Soup is a for data out of HTML and XML files. It works with your to ways of , , and the parse tree. It saves hours or days of work.

大致意思如下: 是一个能从 HTML 或 XML 文件中提取数据的 库。它能通过自己定义的解析器来提供导航、搜索,甚至改变解析树。它的出现,会大大节省开发者的时间。

2 安装

目前 最新版本是 4.6.0,它是支持 的。所以可以大胆去升级安装使用。

安装方法有两种:

3 初始

首先导入 库,然后创建一个 对象,再利用对象做文章。

上面代码中, 可以或者请求返回的内容,也可以是本地 HTML 文本。如果要打开本地,代码需要改为

soup.()函数的作用是打印整个 html 文件的 dom 树,例如上面执行结果如下:

4 解析 对象

想从 html 中获取到自己所想要的内容,我归纳出三种办法:

1)利用 Tag 对象

提取文字神器__提取文字的工具

从上文得知, 将复杂 HTML 文档转换成一个复杂的树形结构,每个节点都是对象。跟安卓中的Gson库有异曲同工之妙。节点对象可以分为 4 种:Tag, , , 。

Tag 对象可以看成 HTML 中的标签。这样说,你大概明白具体是怎么回事。我们再通过例子来更加深入了解 Tag 对象。以下代码是以 () 打印的结果为前提。

获取head标签内容

获取title标签内容

获取p标签内容

如果 Tag 对象要获取的标签有多个的话,它只会返回所以内容中第一个符合要求的标签。

对象一般含有属性,Tag 对象也不例外。它具有两个非常重要的属性, name 和 attrs。

name

attrs

其他三个属性也顺带介绍下:

说白了就是:Tag 对象里面的内容

对象表示的是一个文档的全部内容.大部分时候,可以把它当作 Tag 对象。它是一个特殊的 Tag。

对象是一个特殊类型的 对象。如果 HTML 页面中含有注释及特殊字符串的内容。而那些内容不是我们想要的,所以我们在使用前最好做下类型判断。例如:

2)利用过滤器

过滤器其实是一个()函数, 它会将所有符合条件的内容以列表形式返回。它的构造方法如下:

name 参数可以有多种写法:

另外 attrs 参数可以也作为过滤条件来获取内容,而 limit 参数是限制返回的条数。

3)利用 CSS 选择器

以 CSS 语法为匹配标准找到 Tag。同样也是使用到一个函数,该函数为(),返回类型也是 list。它的具体用法如下, 同样以 () 打印的结果为前提:

5 处理上下关系

从上文可知,我们已经能获取到节点对象,但有时候需要获取其父节点或者子节点的内容,我们要怎么做了?这就需要对parse tree进行遍历

(1)获取子节点.属性,该属性会返回当前节点所以的子节点。但是它返回的类型不是列表,而是迭代

(2)获取所有子孙节点.属性,它会返回所有子孙节点的迭代器

(3)获取父节点.属性可以获得所有子孙节点的迭代器

(4)获取所有父节点.属性,也是返回所有子孙节点的迭代器

(5)获取兄弟节点.属性获取了该节点的下一个兄弟节点,.则与之相反,如果节点不存在,则返回 None

注意:实际 HTML 中的 tag 的.和 .属性通常是字符串或空白,因为空白或者换行也可以被视作一个节点,所以得到的结果可能是空白或者换行

(5)获取所有兄弟节点.和.属性可以对当前节点的兄弟节点迭代输出

推荐:详解

上文: 正则表达式

关于我们

最火推荐

小编推荐

联系我们


版权声明:本站内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 88@qq.com 举报,一经查实,本站将立刻删除。备案号:桂ICP备2021009421号
Powered By Z-BlogPHP.
复制成功
微信号:
我知道了