合肥网站制作公司电话,做网站免费搭建,百度网站排名哪家好,微网站建设报价方案爬虫Day3 csv和bs4
一、CSV的读和写
1. 什么是csv文件
csv文件叫做#xff1a;逗号分隔值文件#xff0c;像Excel文件一样以行列的形式保存数据#xff0c;保存数据的时候同一行的多列数据用逗号隔开。
2. csv文件的读写操作
1) csv文件读操作
from csv import reader…爬虫Day3 csv和bs4
一、CSV的读和写
1. 什么是csv文件
csv文件叫做逗号分隔值文件像Excel文件一样以行列的形式保存数据保存数据的时候同一行的多列数据用逗号隔开。
2. csv文件的读写操作
1) csv文件读操作
from csv import reader, DictReadera.reader
创建根据文件对象创建对应的reader获取文件内容
with open(files/电影.csv, encodingutf-8, newline) as f:r1 reader(f)print(next(r1))print(list(r1))b.DictReader
with open(files/电影.csv, encodingutf-8, newline) as f:r2 DictReader(f)print(next(r2))for x in r2:print(x)2)csv文件写操作
from csv import writer, DictWritera. writer
with open(files/student1.csv, w, encodingutf-8, newline) as f:# 1.根据文件对象创建writer对象w1 writer(f)# 2.写入数据# 1)一次写一行w1.writerow([姓名, 性别, 年龄])w1.writerow([小明, 男, 22])# 2)一次写多行w1.writerows([(小花, 女, 18),[张三, 男, 30]])b. DictWriter
with open(files/student2.csv, w, encodingutf-8, newline) as f:# 1.根据文件对象创建writer对象w2 DictWriter(f, [姓名, 性别, 年龄])# 2.写入数据# 1)将字典的键作为第一行写入文件w2.writeheader()w2.writerow({姓名: 小明, 性别: 男, 年龄: 22})w2.writerows([{姓名: 小花, 性别: 女, 年龄: 17},{姓名: 小红, 性别: 女, 年龄: 18},{姓名: 张三, 性别: 男, 年龄: 30}])二、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标签 子代选择器 - 将两个选择器用连接成一个选择器前后形成父子关系 diva{} - 选中所有在div标签中的a标签a标签必须是div的子标签 后代选择器 - 将两个选择器用空格连接成一个选择器(前后形成后代关系 div a{} - 选中所有在div标签中的a标签a标签必须是div的后代标签 注意安装的时候装beautifulsoup4使用的时候用bs4
from bs4 import BeautifulSoup1.根据网页源代码创建soup对象
BeautifulSoup(网页源代码, ‘lxml’)
f open(files/data.html, encodingutf-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(spanp)
a1 box1.select_one(a)3. 获取标签内容和标签属性
标签对象.text - 获取标签内容 标签对象.attrs[属性名] - 获取标签指定属性的值
print(p1.text) # 我是段落5
print(a1.text) # 我是超链接3
print(a1.attrs[href]) # https://www.baidu.com应用
import requests
from bs4 import BeautifulSoup# 1. 获取网页源代码
headers {user-agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/102.0.0.0 Safari/537.36
}
response requests.get(https://movie.douban.com/top250, headersheaders)
html response.text# 2. 解析数据
soup BeautifulSoup(html, lxml)# 获取每个电影对应的div
div_list soup.select(.grid_viewlidiv)
for x in div_list:name x.select_one(.title).textscore x.select_one(.rating_num).textcomment x.select(.starspan)[-1].text[:-3]print(name, score, comment)