前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >BeautifulSoup库

BeautifulSoup库

作者头像
Mirror王宇阳
发布2020-11-13 11:14:48
发布2020-11-13 11:14:48
9710
举报

## python爬虫-BeautifulSoup库

python爬虫抛开其它,主要依赖两类库:HTTP请求、网页解析;这里requests可以作为网页请求的关键库,BeautifulSoup库则是网页内容解析的关键库;爬虫架构分为五部分:调度器、URL管理器、网页下载器、网页解析器、应用程序等。

requests库是通过封装urllib库的一个HTTP请求库,可以实现urllib绝大部分的功能且使用性高。BeautifulSoup库是第三方库,用来提取xml/html中的数据。

``` python3 #! python3

import requests from bs4 import BeautifulSoup

responses = requests.get("https://www.baidu.com") responses.encoding = "utf-8" # bs解析对象 soup = BeautifulSoup(responses.text,"html.parser",from_encoding="utf-8") # 获取所有a标签内容 links = soup.find_all('a') for link in links: print(link.name,link['href'],link.get_text()) ```

**解析器**

bs4使用时需要指定一个解析器:

- html.parse:python自带,容错不高 - lxml:解析速度快需要额外安装 `pip install lxml` - xml:同属lxml库,支持xml文档 `pip install lxml` - html5lib:容错高,速度慢 `pip install html5lib`

**初始化操作:创建BeautifulSoup对象**

``` python soup = BeautifulSoup(htmlText,'html.parser') ``` 初始化操作会打开一个html文件/页面,创建一个BeautSoup对象,同时初始化要指定解析器。

BeautifulSoup对象即可按照标准缩进格式输出:`soup.prettify()`

**结构化数据**

- `soup.title`查看title标签(包含标签输出html) - `soup.title.name`查看title标签的标签名 - `soup.title.string`查看title标签的text内容 - `soup.title.parent.name`查看title父标签名 - `soup.p`查看p标签(第一个) - `soup.p['class']`查看p标签的属性内容 - `soup.find_all('a')`查看所有a标签(以列表返回) - `soup.find(id="link3")`查看属性id='link3'的标签 - `soup.get_text()`获取文字内容

**对象种类**

bs4将html文档转换成一个复杂的树形结构,每个节点都将是python-bs4的对象,包括

- Tag对象:与html/xml中的tag相同;包含多种方法和属性; - `tag.name` 获取tag的名字 - `tag.attributes` 获取标签的某个属性值`tag['class']`操作方法和字典相同,支持增删改查; - 字符串对象:字符串包含在tab内;字符串对象不支持其它方法。 `tag.string`获取标签内的text文本内容 - BeautifulSoup对象标识一个文档的全部内容 - 特殊对象:注释内容对象

**遍历文档树**

我们可以通过点`.`取方式,获取子节点以及子节点的子节点直至没有子节点,但这种方法只可以获取第一个子节点;可以使用`.find_all()`可以当前节点下指定的所有tab节点

`.contents` 将当前tag的子节点以列表方式输出 `.children` 实现对tag子节点进行循环 `.descendants` 实现对所有子孙节点的递归循环 `.string` 当tag只有一个字符串对象时使用 `.strings` tag包含多个字符串使用,循环获取;可以使用`.stripped_strings`去除多余的空白内容

`.parent` 当前节点的父节点 `.parents` 递归获取元素的所有父节点

`.next_sibling` 遍历所有兄弟节点(之后的所有兄弟节点)`.next_siblings` `.previous_sibling` 遍历所有兄弟节点(之前的所有兄弟节点)`.previous_siblings`

**搜索文档树**

`.find_all( name , attrs , recursive , string , **kwargs )`

`.find( name , attrs , recursive , string , **kwargs )`

> 支持字符串、正则、列表、true、自定义方法

`.limit`支持定义搜索范围和数量 `.recursive`局限范围只搜索直接子节点

其它……[搜索文档树](https://beautifulsoup.readthedocs.io/zh_CN/v4.4.0/#id27)

**输出**

`.prettify()`格式化输出 `.unicode()`/`str()`压缩格式输出

`.get_text()`输出文本内容

我的博客即将同步至腾讯云+社区,邀请大家一同入驻:https://cloud.tencent.com/developer/support-plan?invite_code=2t9x6jeycjgg8

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2020-11-03 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档