day13 csv和bs4总结

day13 csv和bs4

一、什么是cvs文件
csv文件叫做:逗号分隔值文件,像Excel文件一样以行列的形式保存数据,保存数据的同时同一样多的多列数据用逗号隔开
二、csv文件的读写操作
(一)、csv文件读操作
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))
    
 
b.DictReader  (以字典的形式读取文件)
创建根据文件对象创建对应的DictReader,获取文件内容
with open('files/电影.csv', encoding='utf-8', newline='') as f:
    r2 = DictReader(f)
    print(next(r2))     # 一行一行的读取
    for x in r2:        # 读取所有
        print(x)
(二)、写操作
from csv import writer, DictWriter
# a. write
# 根据文件对象创建write对象
with open('files/student1.csv', 'w', encoding='utf-8',newline='')as f:
    # 1. 根据文件对象创建write对象
    w1 = writer(f)

#     2. 写入数据
#     1)一次写一行
    w1.writerow(['姓名', '性别', '年龄'])
    w1.writerow(['小明', '男', '18'])
#     2)一次写入多行(在一次写入多行的时候注意在最后加s)
    w1.writerows([
        ['小花', '女', 18],
        ['张三', '男', 19]
    ])

# b. DictWriter
with open('files/student2.csv', 'w', encoding='utf-8', newline='') as f:
    # 1. 根据文件对象创建write对象
    w2 = DictWriter(f, ['姓名', '性别', '年龄'])
    w2.writeheader()
#     2.写入数据
#     1)将字典的键作为第一行写入文件
    w2.writeheader()
    # 一次写入一行
    w2.writerow({'姓名': '小明', '性别': '男', '年龄': 20})
    # 一次写入多行(在一次写入多行的时候注意在最后加s)
    w2.writerows([
        {'姓名': '小花', '性别': '女', '年龄': 17},
        {'姓名': '张三', '性别': '男', '年龄': 20},
        {'姓名': '李四', '性别': '男', '年龄': 18}
    ])
二、bs4 (beautifulsoup4)
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的后代标签)
# 注意:安装的时候安装beautifulsoup4,使用的时候用的是bs4
from bs4 import BeautifulSoup

# 1.根据网页源代码创建soup对象:BeautifulSoup(网页源代码,'lxml')
f = open('files/date.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)

print('_______________分割线_______________________')
result = soup.select('.c1')
print(result)

print('_______________分割线_______________________')
result = soup.select_one('p')
print(result)

print('_______________分割线_______________________')
result = soup.select('div p')
print(result)

print('_______________分割线_______________________')
box1 = soup.select_one('#box1')
result = box1.select('p')
print(result)

print('_______________分割线_______________________')
p1 = soup.select_one('span>p')
a1 = box1.select_one('a')

print('_______________分割线_______________________')
# 3.获取标签内容和标签属性
# 标签对象.text    —— 获取标签内容
print(p1.text)   # 获取p1的标签内容  我是段落5
print(a1.text)   # 获取a1的标签内容  我是超链接3

print('_______________分割线_______________________')
# 标签对象.attrs[属性名]   —— 获取标签指定属性的值
print(a1.attrs['href'])  # 获取a1的标签值  https://www.baidu.com

你可能感兴趣的:(python,excel,数据分析)