Day3-csv文件和Bs4

文章介绍了如何使用Python的csv模块进行CSV文件的读写操作,包括reader和DictReader对象的使用。同时,文章还讲解了BeautifulSoup库,它是基于CSS选择器的网页解析器,用于解析HTML文档并提取所需信息。
摘要由CSDN通过智能技术生成

Day3-csv文件和Bs4

1. csv文件的读和写操作

# 1. 什么是csv文件:
# csv文件叫做:逗号分隔值文件,像excel文件一样以行列的形式保存数据,保存数据的时候同一行的多列数据用逗号隔开。
# 2. csv文件的读写操作
# 1) csv文件读操作
from csv import reader, DictReader

# a. reader
# 根据csv文件对象,创建对应的reader对象,获取文件内容
with open(r'files\电影.csv', encoding='utf-8', newline='') as f:
    r1 = reader(f)
    print(r1)       # <_csv.reader object at 0x0000023277F39BE0>,是一个生成器或者迭代器
    print(list(r1))

print('----------------------- 华丽的分割线-----------------------')

# b. DictReader
with open(r'files\电影.csv', encoding='utf-8', newline='') as f:
    r2 = DictReader(f)
    print(r2)       # <csv.DictReader object at 0x0000012CB72A0E20>,是一个生成器或者迭代器
    print(list(r2))

print('----------------------- 华丽的分割线-----------------------')


# 2) csv写操作
from csv import writer, DictWriter

# a. writer
with open(r'files\student1.csv', 'w', encoding='utf-8', newline='') as f:
    w1 = writer(f)
    # 1. 根据csv文件对象,创建writer对象
    # 2. 写入数据
    # 1) 一次写一行
    w1.writerow(['姓名', '性别', '年龄'])
    w1.writerow(['小明', '男', 22])
    # 2) 一次写多行
    w1.writerows([
        ['小兰', '女', 18],
        ['张兰', '男', 30]
    ])

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

2. css选择器和bs4

from bs4 import BeautifulSoup
# 注意:按照的时候装beautifulsoup4,使用的时候用bs4
# bs4(beautiful4),它是基于css选择器的网页解析器
"""
css语法:
 选择器{属性名1: 属性值2; 属性名2: 属性值2; ....}
 
 常见属性:color(设置字体颜色)、 background-color(背景颜色)、font-size(字体大小)、width(宽度)、height(高度)、border(边框)
 
 选择器:
 1. 元素选择器(标签选择器) - 将标签作为选择器,选中所有指定的标签
 a{}  -  选中所有的a标签
 p{}  -  选中所有的p标签
 span{}	-	选中所有的span标签
 
 2. id选择器	 -	在标签的id属性前加#作为一个选择器,选中id属性值为指定值的标签
 注意:一个网页中id属性值是唯一的
 #a{}   - 选中id属性值为a的标签
 #b1{}	-	选中id属性值为b1的标签
 
 3. class选择器	-	在标签的class属性值前加.作为一个选择器,选中所有class属性值为指定值的标签
 注意:一个网页中多个标签的class属性值可以相同;同一个标签可以有多个不同的class
	  只有一个class属性值标签的写法:<标签名 class="c1">
	  有多个class属性值标签的写法:<标签名 class="c1 c2 c3">
	  
 .a{}	-	选中class属性值为a标签
 .c1{}	-	选中class属性值为c1的标签
 .a.b{}	-	选中class属性值同时为a和b标签
 a.c1{}	-	选中所有class值为c1的a标签
 
 4. 子代选择器	-	将两个选择器用>连接成一个选择器(前后形成父子关系)
 div>a{}	-	选中所有在div标签中的a标签(a标签必须是div的子标签)
 
 5. 后代选择器 	-	将两个选择器用空格连接成一个选择器(前后形成后代关系)
 div a{}	-	选中所有在div标签中的a标签(a标签必须是div的后代标签)
"""
# 1. 根据网页源代码创建soup对象: BeautifulSoup(网页源代码, 'lxml')
f = open(r'files\data.html', encoding='utf-8')
soup1 = BeautifulSoup(f.read(), 'lxml')
f.close()
# 2. 获取标签对象
# soup对象指的是BeautifulSoup类的对象
# soup对象.select(css选择器)         -   获取整个网页中css选择器选中的所有标签,返回值是一个列表,列表中的元素是标签对象(找不到返回空列表)
# soup对象.select_one(css选择器)     -   获取整个网页中css选择器选中的第一个标签,返回值是一个标签对象(找不到返回None)
# 标签对象.select(css选择器)         -   获取指定标签里面css选择器选中的所有标签,返回值是一个列表,列表中的元素是标签对象(找不到返回空列表)
# 标签对象.select_one(css选择器)     -   获取指定标签里面css选择器选中的第一个标签,返回值是一个标签对象(找不到返回None)

result = soup1.select('p')
print(result)

result = soup1.select('.c1')
print(result)

result = soup1.select_one('p')
print(result)

result = soup1.select_one('div p')
print(result)

box1 = soup1.select_one('#box1')
result = box1.select('p')
print(result)

p1 = soup1.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'

p2 = soup1.select('#box1>span>p')
print(p2)               # [<p xy="报错!">我是段落5</p>]

p2 = soup1.select_one('#box1>span>p')
print(p2)               # <p xy="报错!">我是段落5</p>
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
    <p>我是段落1</p>
    <a class="c1">我是超链接1</a>
    <div>
        <span>我是span1</span>
        <p class="c1">我是段落2</p>
        <div>
            <a href="">我是超链接2</a>
            <p>
                <span class="c2">我是span2</span>
            </p>
        </div>
    </div>
    <div id="box1">
        <p title="abc">我是段落4</p>
        <a href="https://www.baidu.com">我是超链接3</a>
        <span>
            <p xy="报错!">我是段落5</p>
        </span>
    </div>
</body>
</html>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值