当前位置: 首页 > news >正文

Python爬虫---解析---BeautifulSoup

BeautifulSoup简称:bs4

作用:解析和提取数据

1. 安装:pip install bs4  或pip install bs4 -i https://pypi.douban.com/simple(使用国内镜像下载)

注意:需要安装在python解释器相同的位置,例如:D:\Program Files\Python3.11.4\Scripts

2. 导入: from bs4 import BeautifulSoup

3. 创建对象:

        1)服务器响应的文件生成对象:

        soup = Bequtifulsoup(response.read().decode(),'lxml')

        2)本地文件生成对象 soup = BeautifulSoup(open('1.html'),'lxml')

        注意:默认打开文件的编码格式gbk所以需要指定打开编码格式

4.使用:

4.1. bs4的一些函数:  1) find   2) findall    3) select

        1) find:获取第一个符合条件的数据

        2) findall:返回的是一个列表,且返回所有符合条件的标签,如果获取多个标签的数据,需要放在列表中

        3) select:返回的是一个列表,并且会返回多个数据

4.2.  例子:

from bs4 import BeautifulSoup# 通过解析本地文件
soup = BeautifulSoup(open("1224-解析-BeautifulSoup.html", encoding="utf-8"), "lxml")
# print(soup)# 根据标签名查找节点
print(soup.a)  # 获取第一个符合条件的数据的 a标签
print(soup.a.attrs)  # 获取第一个a标签的属性和属性值# bs4的一些函数:  1) find   2) findall    3) select# 1) find:获取第一个符合条件的数据
print(soup.find("a"))  # 获取第一个a标签
print(soup.find("a", title="a2"))  # 根据title值来找到对应的标签对象
print(soup.find("a", class_="a1"))  # 根据class值找到对应标签对象,注意class需要添加下划线# 2) findall:返回的是一个列表,且返回所有符合条件的标签,如果获取多个标签的数据,需要放在列表中
print(soup.find_all("a"))  # 返回所有符合条件的a标签
print(soup.find_all(["a", "span"]))  # 多个需要放在列表中
print(soup.find_all("li", limit=2))  # limit:查找前几个数据# 3) select:返回的是一个列表,并且会返回多个数据
print(soup.select("a"))
print(soup.select(".a1"))  # 可以通过.代表class
print(soup.select("#l1"))  # 可以通过#代表id
# 属性选择器------通过属性查找对应的标签
print(soup.select("li[id]"))  # 查找到li标签中有id的标签
print(soup.select("li[id='l2']"))  # 查找li标签中id为l2的标签
# 层级选择器
print(soup.select("div li"))  # 后代选择器  div下面的li
print(soup.select("div>ul>li"))  # 子代选择器
print(soup.select("a,li"))   # 找到a标签和li标签的所有的对象# 节点信息:
# 1)获取节点内容
obj = soup.select("#d1")[0]
# 如果标签对象中,只有内容,那么string和get_text()都可以用
# 如果标签对象中,除了内容还有标签,那么string就获取不到数据,而get_text()可以获取到数据
print(obj.string)    # None
print(obj.get_text())   # 我是第二个span
# 2)节点的属性
obj1 = soup.select("#p1")[0]
print(obj1.name)  # name:标签的名字     p
print(obj.attrs)  # 将属性值作为一个字典返回       {'id': 'd1'}# 3)获取节点的属性
obj2 = soup.select("#p1")[0]
print(obj2.attrs.get("class"))   # ['p1']
print(obj2.get("class"))   # ['p1']
print(obj2["class"])   # ['p1']

html:

<!doctype html>
<html lang="en">
<head><meta charset="UTF-8"><meta name="viewport"content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0"><meta http-equiv="X-UA-Compatible" content="ie=edge"><title>Document</title>
</head>
<body><div><ul><li id="l1">张三</li><li id="l2">李四</li><li>王五</li><a href="" id="" class="a1">BeautifulSoup</a><span>我是span</span></ul></div><a href="" title="a2">百度</a><div id="d1"><span>我是第二个span</span></div><p id="p1" class="p1">我是p标签</p>
</body>
</html>

http://www.lryc.cn/news/267516.html

相关文章:

  • Argument list too long when copying files
  • configure
  • HOJ 项目部署-前端定制 默认勾选显示标签、 在线编辑器主题和字号大小修改、增加一言功能 题目AC后礼花绽放
  • Scikit-Learn线性回归(二)
  • 07 Vue3框架简介
  • 前端八股文(js篇)
  • windows+ubuntu离线安装翻译软件有道词典
  • DevC++ easyx实现视口编辑,在超过屏幕大小的地图上画点,与解决刮刮乐bug效果中理解C语言指针的意义
  • Kali Linux—借助 SET+MSF 进行网络钓鱼、生成木马、获主机shell、权限提升、远程监控、钓鱼邮件等完整渗透测试(一)
  • 时间与时间戳转换及android和ios对时间识别的区别
  • 飞天使-k8s知识点7-kubernetes升级
  • 【Unity游戏制作】游戏模型导入之前需要注意的三个基本点
  • 三列布局 css
  • Android开发之生命周期(App、Activity)
  • 利用html2Canvas将表格下载为html
  • 《Git快速入门》Git分支
  • HarmonyOS应用性能与功耗云测试
  • 【AI】人工智能本地环境集成安装
  • 主流级显卡的新选择,Sparkle(撼与科技)Intel Arc A750兽人体验分享
  • BI 商业数据分析能够给企业带来什么改变?
  • 模式识别与机器学习-特征选择和提取
  • 嵌入式——RTC闹钟Alarm
  • 【linux】线程控制
  • Swift学习笔记第三节:Set类型
  • 【前端】安装指定版本的nodejs
  • 多商户小程序开源商城源码 打造微信商城新零售网店
  • 云仓酒庄的品牌雷盛红酒LEESON分享干红是纯葡萄酿造的吗?
  • PHP函数学习总结
  • 5G RedCap:轻量5G技术的新宠
  • 【LeetCode 热题 HOT 100】题解笔记 —— Day04