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

bs4解析数据和csv文件

\b 检测所在的位置是否是单词边界(任何可以将不同的单词进行区分的符号:空白符号,标点符号,字符串开头,字符串结尾)

^ 检测是否是字符串开头

$ 检测是否是字符串结尾

csv保存数据

  1. 什么是csv文件

  2. 读操作

    1. reader
    from csv import reader, DictReader
    # a.reader
    # 创建根据文件对象创建对应的reader,获取文件内容
    with open('files/电影.csv', encoding='utf-8', newline='') as f:r1 = reader(f)print(next(r1))print(list(r1))
    
    1. Dictreader
    # b.DictReader
    with open('files/电影.csv', encoding='utf-8', newline='') as f:r2 = DictReader(f)print(next(r2))for x in r2:print(x)
    
  3. 写操作

    1. writer
    from csv import writer, DictWriter
    # a. writer
    with open('files/student1.csv', 'w', encoding='utf-8', newline='') as f:# 1.根据文件对象创建writer对象w1 = writer(f)# 2.写入数据# 1)一次写一行w1.writerow(['姓名', '性别', '年龄'])w1.writerow(['小明', '男', 22])# 2)一次写多行w1.writerows([('小花', '女', 18),['张三', '男', 30]])
    1. Dictwriter
    # b. DictWriter
    with open('files/student2.csv', 'w', encoding='utf-8', newline='') as f:# 1.根据文件对象创建writer对象w2 = DictWriter(f, ['姓名', '性别', '年龄'])# 2.写入数据# 1)将字典的键作为第一行写入文件w2.writeheader()w2.writerow({'姓名': '小明', '性别': '男', '年龄': 22})w2.writerows([{'姓名': '小花', '性别': '女', '年龄': 17},{'姓名': '小红', '性别': '女', '年龄': 18},{'姓名': '张三', '性别': '男', '年龄': 30}])

bs4

  1. css选择器
# 元素选择器:定位特定类型的所有元素。例如,h1 定位页面上的所有 h1 元素。
h1 {/* 样式 */
}
# 类选择器:定位所有具有特定类的元素。例如,.my-class 定位所有具有类 my-class 的元素。
.my-class {/* 样式 */
}
# ID 选择器:定位具有特定 ID 的单个元素。例如,#my-id 定位具有 ID my-id 的元素。
#my-id {/* 样式 */
}
# 属性选择器:定位具有特定属性的元素。例如,[type="text"] 定位所有具有属性 type 设置为 text 的元素。
[type="text"] {/* 样式 */
}
  1. CSS 父子选择器用于定位特定 HTML 元素的子元素并对其应用样式。以下是一些常见的 CSS 父子选择器:
div p {/* 样式 */
}
子元素选择器:定位特定元素的直接子元素。例如,ul > li 定位所有 ul 元素的直接子元素 li 元素。
ul > li {/* 样式 */
}
相邻兄弟选择器:定位特定元素的下一个兄弟元素。例如,h1 + p 定位紧接在 h1 元素后的第一个 p 元素
h1 + p {/* 样式 */
}
通用兄弟选择器:定位特定元素之后的所有兄弟元素。例如,h1 ~ p 定位所有在 h1 元素之后的 p 元素。
h1 ~ p {/* 样式 */
}
你还可以组合父子选择器以定位特定元素的子元素。例如,div > p.my-class 定位所有 div 元素的直接子元素 p 元素,并且该元素具有类 my-class。

bs4语法

BeautifulSoup 是一个 Python 库,用于从 HTML 或 XML 文件中提取数据。它可以帮助你解析 HTML 或 XML 文件,并从中提取所需的数据

from bs4 import BeautifulSoup# 将 HTML 文件加载到 BeautifulSoup 中
with open("index.html") as fp:soup = BeautifulSoup(fp, "html.parser")# 查找所有带有 class="my-class" 的 div 元素
divs = soup.find_all("div", class_="my-class")# 打印每个 div 元素的文本内容
for div in divs:print(div.text)from bs4 import BeautifulSoup# 将 HTML 文件加载到 BeautifulSoup 中
with open("index.html") as fp:soup = BeautifulSoup(fp, "html.parser")# 使用 select 方法查找所有带有 class="my-class" 的 div 元素
divs = soup.select("div.my-class")# 打印每个 div 元素的文本内容
for div in divs:print(div.text)from bs4 import BeautifulSoup# 1. 根据网页源代码创建soup对象: BeautifulSoup(网页源代码, 'lxml')
f = open('files/data.html', encoding='utf-8')
soup = BeautifulSoup(f.read(), 'lxml')
f.close()# 2. 获取标签
# soup对象.select(css选择器)     -   获取整个网页中选择器选中的所有标签,返回值是一个列表,列表中的元素是标签对象(找不到返回空列表)
# soup对象.select_one(css选择器) -   获取整个网页中选择器选中的第一个标签,返回值是标签对象(找不到返回None)
# 标签对象.select(css选择器)   -   获取指定标签中css选择器选中的所有标签
# 标签对象.select_one(css选择器) - 获取指定标签中css选择器选中的第一个标签
result = soup.select('p')
print(result)# result = soup.select('.c1')
# print(result)
#
# result = soup.select_one('p')
# print(result)
#
# result = soup.select('div p')
# print(result)box1 = soup.select_one('#box1')
result = box1.select('p')
print(result)p1 = soup.select_one('span>p')
a1 = box1.select_one('a')# 3. 获取标签内容和标签属性
# 标签对象.text     -   获取标签内容
# 标签对象.attrs[属性名]   -   获取标签指定属性的值print(p1.text)      # '我是段落5'
print(a1.text)      # '我是超链接3'
print(a1.attrs['href'])     # 'https://www.baidu.com'
http://www.lryc.cn/news/44465.html

相关文章:

  • Linux中Buffer和Cache的区别
  • Docker 镜像使用
  • Java阶段一Day10
  • 触摸屏与PLC之间如何快速实现无线PPI通信?
  • 【华为OD机试 2023最新 】 羊、狼、农夫过河(C++ 100%)
  • Java中关于try、catch、finally中的细节分析
  • Zookeeper原理
  • 关于FPGA如何快速生成模块的例化模板(实用)
  • 在 Python 中将字符串转换为集合
  • 大数据Flink进阶(十三):Flink 任务提交模式
  • day11—编程题
  • CentOS下安装crontab及cron表达式解析
  • python 绘制训练曲线--基于Numpy.convolve曲线平均滤波
  • 状态管理插件vuex
  • arthas—阿里开源的Java诊断工具
  • Java学习记录
  • OpenGL API 之 glVertexAttribPointer
  • 蓝桥杯真题4
  • day02_基本语法
  • 多线程之单例模式
  • 2023年绿色建筑国际会议(ICoGB 2023) | Springer独立出版
  • Python中进程和线程到底有什么区别?
  • 2023美赛春季赛F题思路数据代码论文分享
  • 念一句咒语 AI 就帮我写一个应用,我人麻了...
  • 开放平台设计之接口签名认证
  • Vue自创插件发布到npm以及使用方法
  • 合成孔径雷达干涉测量InSAR数据处理、地形三维重建、形变信息提取、监测等实践技术
  • Java刷题,蓝桥杯省赛第十二届(第一场)4-------------6
  • Docker Cgroups——Docker 资源限制背后的技术原理
  • 十四. MySQL 锁相关