Beautiful Soup

Beautiful Soup是python的一个HTML或XML的解析库,可以用它来方便地从网页中提取数据

Beautiful Soup提供一些简单的,python式的函数来处理导航,搜索,修改分析数等功能。它是一个工具箱,通过解析文档为用户提供需要抓取的数据,不需要多少代码就可以写出一个完整的应用程序

Beautiful Soup自动将输入文档转换为unicode编码,输出文档转换为UTF-8编码。不需要考虑编码方式,除非文档没有指定一个编码方式,这时仅仅需要说明一下原始编码方式就可以

基本用法

 

节点选择器

直接调用节点的名称就可以选择节点元素,再调用 st ring 属性就可以得到节点内的文本了,这种选择方式速度非常快 如果单个节点结构层次非常清晰,可以选用这种方式来解析。

这里选择上面的html代码,打印输出title节点的选择结果,输出的内容为title的内容,输出soup.head类型,是bs4.element.Tag类型,它是beautifulsoup的一个重要的数据结构,经过选择器选择后,选择结果都是这种 Tag 类型 Tag 具有一些属性,比如 string

属性,调用该属性,可以得到节点的文本内容,所以接下来的输出结果正是节点的文本内容

name是用来获取节点的名称

attrs用来获取节点的属性,可能是多个,他把选择的节点的所有属性和属性值组合成一个字典。,如果想要获取某个键值,只需要用中括号加属性名就可以,比如,想要获取name属性,可以通过attrs['name']来得到

更加简单的一种方法是,直接在节点元素后面加上中括号,传入属性名就可以获取属性值,例如:soup.p['name']

注意:有的返回结果是字符串,有的是字符串组成的列表,当属性值唯一的时候,返回的是字符串,多个值的时候返回的是列表

 

获取内容,可以利用string属性获取节点元素包含的文本内容。

例如:获取第一个p节点的文本,soup.p.string

 

嵌套选择:soup.head.title.string  获取head节点下的title节点的内容

 

关联选择

再做选择的时候,有时候不能做到一补就选到想要的节点元素,需要先选中某一个节点元素,然后以它为基准在选择他的子节点,父节点,兄弟节点等

如果想要获取它的直接子节点,可以调用contents属性

 

parent可以获得父节点以及内部的内容

parents不仅获得父节点和内部的内容,还可以获取所有的祖先的内容

 

 

兄弟节点,就是获取同级的节点

next_sibling和previous_sibling分别获取节点的下一个和上一个兄弟元素

next_sibling和previous_sibling分别返回所有前面和后面的兄弟节点的生成器

 

提取信息,同前面的方法一样

如果获取到的是单个节点,可以直接调用string,attrs等属性获得文本和属性。如果返回的结果是多个节点的生成器,则可以转为列表后取出某个元素,然后再调用string,attrs等属性获取其对应节点的文本和属性

 

方法选择器

find_all可查找所有符合条件的元素,返回结果为列表类型,元素类型为bs4.element.Tag

根据节点名查询

 

可以使用嵌套进行查询其他节点

 

attrs,根据属性查询,这里使用attrs,传入的数据为字典形式,得到的结果是列表类型

当想要查询的属性为id和class的时候,还可以用如下的方法,注意,下面的class使用的使用要用class_,因为class是python中的一个关键字,所以需要后面需要加上下划线,如:class_="element"

 

text参数可用来匹配节点的文本,传入的可以是字符串,可能是正则表达式对象

这里得到的结果不是列表类型,而是Tag类型

另外还有许多查询方法,与find_all和find的方法完全相同,只不过范围不同

find_parents()和find_parent():前者返回所有祖先节点,后者返回直接父节点

find_next_siblings和find_next_sibling():前者返回后面所有的兄弟节点,后者返回后面第一个兄弟的节点

find_previous_siblings()和find_previous_sibling():前者返回前面所有的兄弟节点,后面返回前面第一个兄弟节点

find_all_next()和find_next():前者返回节点后所有符合条件的节点,后者返回第一个符合条件的节点

find_all_previous()和find_previous():前者返回节点后所有符合条件的节点,后者返回第一个符合条件的节点

 

CSS选择器

 

获取属性,直接传入中括号和属性名,或者直接输入attrs获取属性名

获取文本可使用get_text(),或者是前边的属性string

但是当出现以下情况的时候,结果不同,在里面循环,get_text()得到的结果是整个自身节点包括子节点的内容,string返回的是None

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值