python-数据解析-bs4介绍
一、数据解析方式-bs4
1、 爬虫数据的解析常用方式有三种:
1、正则表达式
2、bs4
3、xpath解析
2、本次主要学习bs4,首先要先准备好环境,即要安装使用beautiful Soup,这里已经安装好了bs4模块,如下:
pip install bs4 和 pip install lxml
3、通过一个实例理解bs4的用法:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | <html lang= "en" > <head> <meta charset= "UTF-8" /> <title>Title</title> </head> <body> <div class = "url" > <ul> <li><a href= "http://www.baidu.com" >百度</a></li> <li><a href= "http://www.google.com" >谷歌</a></li> <li><a href= "http://www.sogou.com" >搜狗</a></li> </ul> <ol> <li><a href= "feiji" >飞机</a></li> <li><a href= "dapao" >大炮</a></li> <li><a href= "huoche" >火车</a></li> </ol> </div> <div class = "job" >李嘉诚</div> <div class = "common" >胡辣汤</div> </body> </html> |
如下:
from bs4 import BeautifulSoup #导入bs4 if __name__=="__main__": # 将本地的html文档中的数据加载到该对象中 file = open('b.html', encoding='utf-8') soup = BeautifulSoup(file,'lxml')
print(soup.ul) #返回ul所有内容 # < ul > # < li > < a # href = "http://www.baidu.com" > 百度 < / a > < / li > # < li > < a # href = "http://www.google.com" > 谷歌 < / a > < / li > # < li > < a # href = "http://www.sogou.com" > 搜狗 < / a > < / li > # < / ul > print(soup.div) #等同于print(soup.find('div')) #具体定位到某一个div,可根据属性定位
print(soup.find('div',class_='common')) #<div class="common">胡辣汤</div>
# 属性定位
soup.findAll('tagName') #返回soup中符合要求的所有标签
a_list = soup.findAll('a') #返回的是一个列表
for a in a_list:
print(a)
print(soup.findAll('a')[1]) #定位第2个a标签的内容
# <a href="http://www.google.com">谷歌</a>
# select选择器:
# -select('某种选择器(id,class ,标签。。。选择器)’)
print(soup.select('.common')) #返回login下的所有标签 :[<div class="common">胡辣汤</div>]
print(soup.select('div')[1]) #返回一个列表 :<div class="job">李嘉诚</div>
# 层级选择器
# soup.select('.tag > ul > li > a')[1]#:表示的一个层级,不能在里写所有,
print(soup.select('.url > ol > li > a '))
# [<a href="feiji">飞机</a>, <a href="dapao">大炮</a>, <a href="huoche">火车</a>
#一个>表示一个层级
print(soup.select('.url > ul > li > a')[0]['href'])
# http://www.baidu.com
print(soup.select('.url ul a')) #[<a href="http://www.baidu.com">百度</a>, <a href="http://www.google.com">谷歌</a>, <a href="http://www.sogou.com">搜狗</a>]
print(soup.select('.url ol li a')) #[<a href="feiji">飞机</a>, <a href="dapao">大炮</a>, <a href="huoche">火车</a>]
获取标签的文本数据
#text/get.text() 可以获取某一个标签中所有内容
#string :获取直系标签的内容
print(soup.find('div',class_= 'url').text) #获取一个url下的所有的值
百度
谷歌
搜狗
飞机
大炮
火车
#获取某一个元素的值
print(soup.find('div',class_= 'job').string) #李嘉诚
获取属性的值比如href
# 1、查找所有的<a>标签元素,2、打印每个<a>标签的href属性值
links = soup.findAll('a')
for link in links:
print(link['href'])
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· winform 绘制太阳,地球,月球 运作规律
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现