Day3-csv文件和Bs4
1. csv文件的读和写操作
from csv import reader, DictReader
with open(r'files\电影.csv', encoding='utf-8', newline='') as f:
r1 = reader(f)
print(r1)
print(list(r1))
print('----------------------- 华丽的分割线-----------------------')
with open(r'files\电影.csv', encoding='utf-8', newline='') as f:
r2 = DictReader(f)
print(r2)
print(list(r2))
print('----------------------- 华丽的分割线-----------------------')
from csv import writer, DictWriter
with open(r'files\student1.csv', 'w', encoding='utf-8', newline='') as f:
w1 = writer(f)
w1.writerow(['姓名', '性别', '年龄'])
w1.writerow(['小明', '男', 22])
w1.writerows([
['小兰', '女', 18],
['张兰', '男', 30]
])
with open(r'files\student2.csv', 'w', encoding='utf-8', newline='') as f:
w2 = DictWriter(f, ['姓名', '性别', '年龄'])
w2.writeheader()
w2.writerow({'姓名': '小明', '性别': '男', '年龄': 22})
w2.writerows([
{'姓名': '小花', '性别': '女', '年龄': 17},
{'姓名': '小红', '性别': '女', '年龄': 21},
{'姓名': '张三', '性别': '男', '年龄': 25}
])
2. css选择器和bs4
from bs4 import BeautifulSoup
"""
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的后代标签)
"""
f = open(r'files\data.html', encoding='utf-8')
soup1 = BeautifulSoup(f.read(), 'lxml')
f.close()
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')
print(p1.text)
print(a1.text)
print(a1.attrs['href'])
p2 = soup1.select('#box1>span>p')
print(p2)
p2 = soup1.select_one('#box1>span>p')
print(p2)
<!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>