数据解析基础之BeautifulSoup
2021/5/4 10:56:22
本文主要是介绍数据解析基础之BeautifulSoup,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
一、BeautifulSoup库
- Beautiful Soup 提供一些简单的、python 式的函数用来处理导航、搜索、修改分析树等功能。它是一个工具箱,通过解析文档为用户提供需要抓取的数据,因为简单,所以不需要多少代码就可以写出一个完整的应用程序。 Beautiful Soup 自动将输入文档转换为 Unicode 编码,输出文档转换为 utf-8 编码。你不需要考虑编码方式,除非文档没有指定一个编码方式,这时,Beautiful Soup 就不能自动识别编码方式了。然后,你仅仅需要说明一下原始编码方式就可以了。 Beautiful Soup 已成为和 lxml、html6lib 一样出色的 python 解释器,为用户灵活地提供不同的解析策略或强劲的速度。
- 简单来说,就是可以方便的处理HTML/XML页面源码,提取我们需要的标签信息。
1.1、bs4数据解析的原理
- 实例化一个BeautifulSoup对象,并且将页面源代码数据加载到该对象中。
- 通过调用BeautifulSoup对象中相关的属性或者方法进行标签定位和数据提取。
1.2、bs4环境安装
下载BeautifulSoup包 # pip install bs4 下载lxml包 pip install lxml
二、bs4简单使用示例
2.1、实例化BeautifulSoup对象
# 1、首先导包 from bs4 import BeautifulSoup # 2、实例化BeautifulSoup对象,数据加载到该对象中分为两种 :将本地的HTML文档数据加载到该对象中 / 将网络请求响应的页面源码加载到该对象中 # 将本地的HTML文档数据加载到该对象中 fp = open('./test.html', 'r', encoding='utf-8') soup = BeautifulSoup(fp, 'lxml') # 将网络请求响应的页面源码加载到该对象中 # page_text = response.text # soup = BeatuifulSoup(page_text, 'lxml')
2.2、bs4 常用的方法和属性
soup.tagName
:返回文档中第一次出现的tagName
对应的标签名称soup.find()
:- find('tagName'),等同于soup.div
- 属性定位:soup.find('div', class_/id/attribution='value')。前一个参数表示标签名,后一个参数表示该标签的属性值。
soup.find_all()
:返回找到的所有结果,列表类型select
:- select('某种选择器(id, class, 标签...选择器)'),返回一个列表
- 层级选择器:soup.select('.test > ul > li > a'),其中>表示一个层级,空格 表示多个层级,所有上面语句就是选择属性值为test的标签单个层级下的ul标签单层下的li标签下的a标签。
获取标签之间的文本数据
:- soup.a.text/string/get_test(),表示搜索所有a标签中的文本
- text/get_text():可以获取某个标签中所有的文本内容
- string:只可以获取该标签下直系的文本内容
2.3、实战示例
- 首先编写test.html文件,内容如下 : 用于将本地的HTML文档数据加载到该对象中;
// test.html <html lang="en"> <head> <meta charset="UTF-8" /> <title>测试bs4</title> </head> <body> <div> <p>百里守约</p> </div> <div class="song"> <p>李清照</p> <p>王安石</p> <p>苏轼</p> <p>柳宗元</p> <a href="http://www.song.com" title="赵匡胤" target="_self"> <span>this is span</span> 宋朝是强大的王朝,不是军队的强大,而是经济很强大。 </a> <a href="" class="du">总为浮云能蔽日,长安不见使人愁</a> <img src="http://www.baidu.com/meiny.jpg" alt="" /> </div> <div class="tang"> <ul> <li><a href="http://www.baidu.com" title="qing">清明时节雨纷纷,路上行人欲断魂</a> </li> <li><a href="http://www.163.com" title="qing">清明时节雨纷纷,路上行人欲断魂</a> </li> <li><a href="http://www.126.com" title="qin">秦时明月汉时关,万里长征人未还</a> </li> <li><a href="http://www.sina.com" title="qi">岐王宅里寻常见,崔九堂前几度闻</a> </li> <li><a href="http://www.aaa.com" title="lu">杜甫</a> </li> <li><b>leo</b> </li> <li><i>风雨寒</i> </li> <li><a href="http://www.baidu.com" title="feng">凤凰台上凤凰游,凤去台空江自流</a> </li> </ul> </div> </body> </html>
- 使用基础的方法
# 1、首先导包 from bs4 import BeautifulSoup # 2、实例化BeautifulSoup对象,数据加载到该对象中分为两种 :将本地的HTML文档数据加载到该对象中 / 将网络请求响应的页面源码加载到该对象中 # 将本地的HTML文档数据加载到该对象中 fp = open('./test.html', 'r', encoding='utf-8') soup = BeautifulSoup(fp, 'lxml') # 3、常用方法示例 # print(soup) print(soup.a) # soup.tagName 返回第一次出现的标签内容 print(soup.div) print(soup.find('div')) print(soup.find('div',class_='song')) print(soup.select('.tang > ul > li > a')[0]) print(soup.select('.tang > ul > li > a')[0].text) print(soup.select('.tang > ul > li > a')[0]['href'])
- 执行结果
<a href="http://www.song.com" target="_self" title="赵匡胤"> <span>this is span</span> 宋朝是强大的王朝,不是军队的强大,而是经济很强大。 </a> <div> <p>百里守约</p> </div> <div> <p>百里守约</p> </div> <div class="song"> <p>李清照</p> <p>王安石</p> <p>苏轼</p> <p>柳宗元</p> <a href="http://www.song.com" target="_self" title="赵匡胤"> <span>this is span</span> 宋朝是强大的王朝,不是军队的强大,而是经济很强大。 </a> <a class="du" href="">总为浮云能蔽日,长安不见使人愁</a> <img alt="" src="http://www.baidu.com/meiny.jpg"/> </div> <a href="http://www.baidu.com" title="qing">清明时节雨纷纷,路上行人欲断魂</a> 清明时节雨纷纷,路上行人欲断魂 http://www.baidu.com
这篇关于数据解析基础之BeautifulSoup的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-07-04TiDB 资源管控的对撞测试以及最佳实践架构
- 2024-07-03万字长文聊聊Web3的组成架构
- 2024-07-02springboot项目无法注册到nacos-icode9专业技术文章分享
- 2024-06-26结对编程到底难不难?答案在这里
- 2024-06-19《2023版Java工程师》课程升级公告
- 2024-06-15matplotlib作图不显示3D图,怎么办?
- 2024-06-1503-Loki 日志监控
- 2024-06-1504-让LLM理解知识 -Prompt
- 2024-06-05做软件测试需要懂代码吗?
- 2024-06-0514-ShardingSphere的分布式主键实现