1. csv文件
1.1 什么是csv文件
csv文件叫做逗号分割值文件,像Excel文件一样以行列的形式保存数据,保存数据的时候同一行的多列数据用逗号隔开
1.2 csv文件的读写操作
-
csv文件读操作
a.
reader
:创建根据文件对象创建对应的reader
,获取文件内容 b.
DictReader
from csv import reader, DictReader
with open('file/电影.csv', encoding='utf-8', newline='') as f:
r1 = reader(f)
print(next(r1))
print(list(r1))
with open('file/电影.csv', encoding='utf-8', newline='') as f:
r2 = DictReader(f)
print(next(r2))
for x in r2:
print(x)
-
写操作
a.
writer
b.
DictReader
with open('file/student2.csv', 'w', encoding='utf-8', newline='') as f:
# 1. 根据文件对象writer对象
w2 = DictWriter(f, ['姓名', '性别', '年龄'])
# 2. 写入数据
# 1) 将字典的键作为第一行写入文件
w2.writeheader()
w2.writerow({'姓名': '小明', '性别': '男', '年龄': 18})
w2.writerows([
{'姓名': '张三', '性别': '男', '年龄': 19},
{'姓名': '李四', '性别': '女', '年龄': 20},
{'姓名': '王五', '性别': '男', '年龄': 30}
])
2. bs4
bs4
(beautifulsoup4的缩写),它是基于css选择器的网页解析器
css语法:
选择器{属性名1: 属性值2; 属性名2: 属性值2; …}
常见属性:color(设置字体颜色)
、 background-color(背景颜色)
、font-size(字体大小)
、 width(宽度)
、height(高度)
、border(边框)
选择器:
-
元素选择器(标签选择器) - 将标签作为选择器,选中所有指定的标签
a{}
- 选中所有的a标签
p{}
- 选中所有的p标签span{}
- 选中所有的span标签 -
id选择器 - 在标签的id属性前加#作为一个选择器,选中id属性值为指定值的标签
注意:一个网页中id属性值是唯一的
#a{}
- 选中id属性值为a的标签
#b1{}
- 选中id属性值为b1的标签 -
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标签 -
子代选择器 - 将两个选择器用>连接成一个选择器(前后形成父子关系)
div>a{}
- 选中所有在div标签中的a标签(a标签必须是div的子标签) -
后代选择器 - 将两个选择器用空格连接成一个选择器(前后形成后代关系)
div a{}
- 选中所有在div标签中的a标签(a标签必须是div的后代标签)
注意:安装的时候装beautifulsoup4
,使用的时候用bs4
1. 根据网页源代码创建soup对象
Beautifulsoup(网页源代码, 'lmxl')
f = open(r'file/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