数据分析4 -- 将爬取的数据保存成CSV格式

这篇具有很好参考价值的文章主要介绍了数据分析4 -- 将爬取的数据保存成CSV格式。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

什么是 CSV 文件

CSV(Comma-Separated Values) 是一种使用逗号分隔来实现存储表格数据的文本文件。

我们都知道表格有多种形式的存储,比如 Excel 的格式或者数据库的格式。CSV 文件也可以存储表格数据,并且能够被多种软件兼容,比如 Excel 就能直接打开 CSV 文件的表格,很多数据库软件也支持导入 CSV 文件。除了兼容性好之外,CSV 格式还是所有能存储表格的格式中最简单的一种。

下面,我们以一个例子来讲解 CSV 存储表格的原理。

假设有如下员工信息的表格。

数据分析4 -- 将爬取的数据保存成CSV格式

 要存储类似上面的表格,以往我们只能将其输入到 Excel 中并保存为 xlsx 格式,现在我们来尝试将其以 CSV 的格式保存。

打开文本编辑器,如 Windows 下的记事本,新建空白文件。

输入以下内容,并保存为 info.csv (编码选择 ANSI)

姓名,年龄,籍贯,部门
小明,22,河北,IT部
小亮,25,广东,IT部
小E,23,四川,财务部

保存成功后,用 Excel 打开这个文件,可以看到 CSV 文件成功地在 Excel 中展示为表格。

数据分析4 -- 将爬取的数据保存成CSV格式

  • 表格中的一行,对应 CSV 文件中的一行;

  • 一行中不同单元格的内容,在 CSV 文件中用逗号分隔;

  • 务必保证每行的逗号数量是一致的(对应表格中每行的单元格一致)。

在我们后续的数据分析任务中,CSV 文件将会是我们存储数据的主要格式。

Python 的 CSV 模块

熟悉了 CSV 文件的基本概念,今天我们来学习如何使用 Python 来操作 CSV 文件。因为对于数据分析场景而言,最常见的操作就是读取和写入。

从 CSV 文件读取内容

要读取 CSV 文件,就要用到 csv 模块中的 DictReader 类,DictReader 可以将每一行以字典的形式读出来,key 就是表头,value 就是对应单元格的内容。

例如:

1. 通过DictReader 对象的创建以及通过 fileldnames 属性获取了 CSV 表格的表头

import csv

# 通过 open 函数打开 info.csv ,并将文件对象保存在 fo 中
fo = open("info.csv")
# 通过打开 CSV 文件的文件对象作为参数来创建 DictReader 类的对象,存在 reader 变量中
reader = csv.DictReader(fo)
# 调用 reader 对象的 fieldnames 属性,获取 CSV 文件中表格的表头
headers = reader.fieldnames
# 关闭文件
fo.close()
# 打印表头的信息
print(headers)

输出:

['姓名', '年龄', '籍贯', '部门']

2. 获取表格实际内容

import csv

# 打开 info.csv ,并将文件对象保存在 f 中
with open("info.csv","r",encoding="utf-8") as f:
    # 通过打开 CSV 文件的文件对象作为参数来创建 DictReader 类的对象,存在 reader 变量中
    reader = csv.DictReader(f)
    # 调用 reader 对象的 fieldnames 属性,获取 CSV 文件中表格的表头
    headers = reader.fieldnames

    # 创建列表,用于存储读到的行
    row_list = []
    # 使用遍历循环,直接对 reader 对象进行遍历
    # 每次执行循环时,row 变量都存储了当前行的内容
    for row in reader:
        # 直接将 row 变量添加到行列表中
        row_list.append(row)

# 打印表头的信息
# print(headers)
# 打印第一行的表格数据
print(row_list[0])

输出:

{'姓名': '小明', '年龄': '22', '籍贯': '河北', '部门': 'IT部'}

可以看到,我们拿到了第一行的内容,并且是以字典的形式,字典把每个单元格的内容和表头联系了起来,表头是 key,而具体内容就是 value。每行都是这样的一个字典,所有字典都存储在 row_list 列表中。

接下来,我们来演示对于 row_list 列表的常见操作:打印某一行、某一列的值:

print("打印年龄一列的内容:")
# 遍历循环 row_list,d 为循环变量
for d in row_list:
    # 因为 d 是字典,直接打印 key 为 年龄的值即可。
    print(d["年龄"])
# 打印一个换行
print("")
print("打印第三行的内容:")
d = row_list[2]
print("姓名:", d["姓名"])
print("年龄:",d["年龄"])
print("籍贯:",d["籍贯"])
print("部门:",d["部门"])

输出:

打印年龄一列的内容:
22
25
23

打印第三行的内容:
姓名: 小E
年龄: 23
籍贯: 四川
部门: 财务部

写入 CSV 文件

在之前的例子中,我们写入 CSV 文件是手动写入的,现在我们来试着通过 Python 写入 CSV 文件。

与读取类似,Python 的 csv 模块提供了 DictWriter 方法,使得我们可以将表格数据以字典的形式存在到 CSV 文件中。

import csv

# 打开一个文件,假设是 info2.CSV,因为是写入,所以需要指定模式 "w"
# newline='',在写入 CSV 时,需要指定这个参数,这个记住即可。

with open("info2.CSV", "w", newline='') as f:
    # 将表头存储在一个列表中
    header = ["姓名", "年龄", "籍贯", "部门"]
    # 创建一个 DictWriter 对象,第二个参数就是上面创建的表头
    writer = csv.DictWriter(f, header)
    # 写入表头
    writer.writeheader()
    # 写入一行记录,以字典的形式,key 需要和表头对应。
    writer.writerow({"姓名": "小刚", "年龄":"28", "籍贯":"福建", "部门":"行政部"})

上述代码的关键点就在于,创建了 DictWriter 后,需要首先调用 writeheader 来写入表头,然后再调用 writerow 来写入行。

执行上述代码之后,并不会有内容输出,但是文件夹下会多出一个 Info2.csv, 用Excel 打开后,如下图所示。

数据分析4 -- 将爬取的数据保存成CSV格式

可以看到,我们的表头和记录已经成功写入 CSV 文件中。

DictWriter 除了提供 writerow 方法来将单个字典保存为 CSV 表格中的一行,还提供了 writerows 方法来一次性地保存多行的内容。

import csv

# 打开一个文件,假设是 info2.CSV,因为是写入,所以需要指定模式 "w"
# newline='',在写入 CSV 时,需要指定这个参数,这个记住即可。

with open("info2.CSV", "w", newline='') as f:
    # 将表头存储在一个列表中
    header = ["姓名", "年龄", "籍贯", "部门"]
    # 创建一个 DictWriter 对象,第二个参数就是上面创建的表头
    writer = csv.DictWriter(f, header)
    # 写入表头
    writer.writeheader()
    # 写入一行记录,以字典的形式,key 需要和表头对应。
    writer.writerow({"姓名": "小刚", "年龄":"28", "籍贯":"福建", "部门":"行政部"})

    row_list = [{"姓名": "小hong", "年龄": "26", "籍贯": "山西", "部门": "开发"}]
    # 将小明的记录插入到row_list 中
    row_list.append({"姓名": "小明", "年龄": "26", "籍贯": "香港", "部门": "运维"})
    # 调用 writerows 方法,一次性写多个字典(一个字典列表)到 CSV 文件中
    writer.writerows(row_list)

实现煎蛋新闻列表保存到 CSV 文件中

接下来,我们来将上一篇中过滤出来的新闻列表写入 CSV 文件中。在上一篇中,我们在课程内容中获取了煎蛋的新闻标题。

我们今天的内容就是将每篇新闻的这两个内容保存到 CSV 中,相当于一个新闻就是一行,每一行有两列,一个是新闻标题,一列是发布时间。对应的表头就是:标题、发布时间。

将上一篇中抽取标题的代码整理成四个函数,方便后续调用:

(1)数据准备

第一步,将上一篇中的抽取标题的代码整理成几个函数,方便后续调用:

  1. 打开文件网页,读出内容,并创建对应的 BeautifulSoup 对象;
  2. 找到所有包含新闻的 div 元素列表(class=indexs 的 div);
  3. 从 2 中的 div 元素中抽取出标题;
  4. 从 2 中的 div 元素中抽取出时间。

我们把上述四个操作整理为四个函数。

1. 首先实现创建 BeautifulSoup 对象的函数。

from bs4 import BeautifulSoup
# 输入参数为要分析的 html 文件名,返回值为对应的 BeautifulSoup 对象
def create_doc_from_filename(filename):
    fo = open(filename, "r", encoding='utf-8')
    html_content = fo.read()
    fo.close()
    doc = BeautifulSoup(html_content)
    return doc

2. 实现定位包含新闻的 div 元素的列表函数。

# 输入参数是 BeautifulSoup 对象,返回包含新闻的 div 元素列表
def find_index_labels(doc):
    index_labels = doc.find_all("div", class_="indexs")
    return index_labels

3. 实现新闻标题的抽取函数。

# 从第一次 find_all 获取的标签对象中抽取标题
def get_title(label_object):
    # 从刚才的参数传入的标签对象中过滤出所有 target=_blank 的 a 标签
    a_labels = label_object.find_all("a",target="_blank")
    # 取第一个标签对象
    my_label = a_labels[0]
    # 将标签的文字内容作为返回值返回
    return my_label.get_text()

4. 实现获取新闻发布时间的函数。

# 和 get_title 函数一样,传入 label_object, 返回发布时间
def get_pub_time(label_object):
    # 找到 class=comment-link 的 span 标签
    spans = label_object.find_all("span", class_="comment-link")
    # 取第一个
    span = spans[0]
    # 返回标题属性
    return span["title"]

(2)获取新闻标题与列表
接下来,我们开始使用上面的函数来获得新闻的标题与新闻列表。

# 调用 create_doc_from_filename 函数,创建 BeautifulSoup 对象
doc = create_doc_from_filename("jiandan.html")
# 调用find_index_labels 函数,传入 BeautifulSoup 对象
# 将返回的 div 列表存储在 index_labels 中
index_labels = find_index_labels(doc)
# 使用遍历循环遍历 index_labels 列表,循环变量为 label_object
for label_object in index_labels:
    # 调用 get_title, 传入当前处理的 div 元素对象,获取标题
    title = get_title(label_object)
    # 调用 get_pub_time,传入当前处理的 div 元素对象,获取发布时间
    pub_time = get_pub_time(label_object)
    # 将标题和发布时间打印出来
    print("标题:", title)
    print("发布时间:", pub_time)

上述代码把我们刚才准备的四个函数都串了起来。大概的思路就是首先创建 BeautifulSoup 对象,之后针对该对象查询 class = indexs 的列表,然后使用遍历循环遍历该列表,对于每一个 div 元素,分别调用 get_title 以及 get_pub_time 函数来获得标题与发布时间。

执行上述代码后,输出如下所示。可以看到,我们的新闻标题和时间都已经被成功打印了出来。

标题: 引发普通感冒的鼻病毒会将新冠病毒排挤出细胞!
发布时间: 1小时 ago
标题: 无厘头研究:植入虚假的记忆再抹去它们
发布时间: 4小时 ago
标题: 什么是仇恨犯罪?
发布时间: 8小时 ago
标题: 突发:LHCb发现了违背标准模型的现象
发布时间: 12小时 ago
标题: 今日带货 20210324
发布时间: 14小时 ago
标题: 舌战裸猿:IBM搞出了可以打辩论赛的AI
发布时间: 23小时 ago
标题: 大吐槽:「我没醉,醉的是世界」
发布时间: 1天 ago
标题: 今年世界总发电量的0.6%被用于挖比特币
发布时间: 1天 ago
标题: 接种疫苗后还是感染新冠?不要为此惊讶
发布时间: 1天 ago
标题: 今日带货:蛋友家的血橙
发布时间: 2天 ago
标题: 科学家首次在野外检测到抗多药的超级真菌
发布时间: 2天 ago
标题: 未在iPhone12盒中搭配充电器,苹果被巴西消协罚200万美元
发布时间: 2天 ago
标题: 工程师将解决城市陷坑的问题
发布时间: 2天 ago
标题: 今日带货:粉面专场
发布时间: 3天 ago
标题: 科学家在碟子里培育出了泪腺,并让它哭泣
发布时间: 3天 ago
标题: 疯狂实验进行时:把志愿者禁闭在黑暗的空间里40天
发布时间: 3天 ago
标题: 今日带货 20210321
发布时间: 4天 ago
标题: 我们已向外星人发送了哪些消息?
发布时间: 4天 ago
标题: 脑力小体操:石头+剪刀 VS 石头+布
发布时间: 4天 ago
标题: 发霉啦:今天,我终于向母亲摊牌了
发布时间: 5天 ago
标题: 普渡大学的经济学家计算出世界各地幸福的价格
发布时间: 5天 ago
标题: 人类首次观察到木星上极光黎明风暴的成形过程
发布时间: 5天 ago
标题: 为女儿出头,母亲编辑假裸照败坏高中啦啦队队员的名誉
发布时间: 5天 ago
标题: 今日带货:淘宝京东蛋友推荐
发布时间: 6天 ago

(3)将数据存储为字典的形式
要存储到 CSV,首先我们需要将我们的数据创建为字典的形式,我们可以在(2)的循环中将标题和时间存储为字典,然后使用一个字典列表来存储每个新闻对应的字典。最后直接使用 DictWriter 的 writerows 方法来将字典列表写入 CSV 文件即可。

我们直接修改刚才打印标题和发布时间的 Cell,删除原本的打印代码,并添加字典相关操作的代码。

# 调用 create_doc_from_filename 函数,创建 BeautifulSoup 对象
doc = create_doc_from_filename("jiandan.html")
# 调用find_index_labels 函数,传入 BeautifulSoup 对象
# 将返回的 div 列表存储在 index_labels 中
index_labels = find_index_labels(doc)
# 【新增代码】存储新闻的字典列表
news_dict_list = []
# 使用遍历循环遍历 index_labels 列表,循环变量为 label_object
for label_object in index_labels:
    # 调用 get_title, 传入当前处理的 div 元素对象,获取标题
    title = get_title(label_object)
    # 调用 get_pub_time,传入当前处理的 div 元素对象,获取发布时间
    pub_time = get_pub_time(label_object)
    # 【新增代码】创建单条新闻的字典
    news = {"标题": title, "发布时间": pub_time}
    # 【新增代码】将新闻字典添加到字典列表
    news_dict_list.append(news)
# 【新增代码】打印出字典列表
print(news_dict_list)

通过循环,我们将新闻以字典的形式逐个添加到了字典列表中,然后在最后打印出列表,输出如下所示。

[{'标题': '引发普通感冒的鼻病毒会将新冠病毒排挤出细胞!', '发布时间': '1小时 ago'}, {'标题': '无厘头研究:植入虚假的记忆再抹去它们', '发布时间': '4小时 ago'}, {'标题': '什么是仇恨犯罪?', '发布时间': '8小时 ago'}, {'标题': '突发:LHCb发现了违背标准模型的现象', '发布时间': '12小时 ago'}, {'标题': '今日带货 20210324', '发布时间': '14小时 ago'}, {'标题': '舌战裸猿:IBM搞出了可以打辩论赛的AI', '发布时间': '23小时 ago'}, {'标题': '大吐槽:「我没醉,醉的是世界」', '发布时间': '1天 ago'}, {'标题': '今年世界总发电量的0.6%被用于挖比特币', '发布时间': '1天 ago'}, {'标题': '接种疫苗后还是感染新冠?不要为此惊讶', '发布时间': '1天 ago'}, {'标题': '今日带货:蛋友家的血橙', '发布时间': '2天 ago'}, {'标题': '科学家首次在野外检测到抗多药的超级真菌', '发布时间': '2天 ago'}, {'标题': '未在iPhone12盒中搭配充电器,苹果被巴西消协罚200万美元', '发布时间': '2天 ago'}, {'标题': '工程师将解决城市陷坑的问题', '发布时间': '2天 ago'}, {'标题': '今日带货:粉面专场', '发布时间': '3天 ago'}, {'标题': '科学家在碟子里培育出了泪腺,并让它哭泣', '发布时间': '3天 ago'}, {'标题': '疯狂实验进行时:把志愿者禁闭在黑暗的空间里40天', '发布时间': '3天 ago'}, {'标题': '今日带货 20210321', '发布时间': '4天 ago'}, {'标题': '我们已向外星人发送了哪些消息?', '发布时间': '4天 ago'}, {'标题': '脑力小体操:石头+剪刀 VS 石头+布', '发布时间': '4天 ago'}, {'标题': '发霉啦:今天,我终于向母亲摊牌了', '发布时间': '5天 ago'}, {'标题': '普渡大学的经济学家计算出世界各地幸福的价格', '发布时间': '5天 ago'}, {'标题': '人类首次观察到木星上极光黎明风暴的成形过程', '发布时间': '5天 ago'}, {'标题': '为女儿出头,母亲编辑假裸照败坏高中啦啦队队员的名誉', '发布时间': '5天 ago'}, {'标题': '今日带货:淘宝京东蛋友推荐', '发布时间': '6天 ago'}]

(4)存储到 CSV 文件中

现在,我们已经将网页中抓取到的数据都保存在一个字典列表中:news_dict_list ,接下来就是将这个列表写入到 CSV 文件中即可。

代码如下所示:

# 创建 news.CSV 文件
fo = open("news.CSV", "w", newline='', encoding='utf_8_sig')
# 这一次的表头
header = ["标题", "发布时间"]
# 使用文件对象和表头初始化 DictWriter 对象
writer = CSV.DictWriter(fo, header)
# 写入表头
writer.writeheader()
# 将上一步计算的字典列表写入 CSV 文件中
writer.writerows(news_dict_list)
# 关闭文件对象
fo.close()

至此,数据已经成功保存到了csv文件中。文章来源地址https://www.toymoban.com/news/detail-500155.html

到了这里,关于数据分析4 -- 将爬取的数据保存成CSV格式的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • python爬取招聘网信息并保存为csv文件

    我们以猎聘网为例 一、打开网站查找信息 进入后搜索想要爬取的岗位信息,右键选择 “检查” 进入开发者界面 点击右上角的network,选择doc 然后点击图中的搜索按钮,输入想要爬取的岗位名称,然后刷新页面,选择搜索下边的第二个 这个时候我们看到有我们需要的url,从

    2024年02月09日
    浏览(44)
  • 爬取的数据可以入表吗?怎样入表?

    合规是数据入表的前提。当前爬虫数据是非常敏感的,因为爬虫极容易造成两大不合规的问题:一是没有经过个人同意获取数据,二是爬取的数据里可能含有个人敏感信息也是一个问题。现在法律对于这部分非常严苛,如果企业里有50条未获得授权的个人信息就已经处于高危

    2024年01月22日
    浏览(51)
  • Python--爬取天气网站天气数据并进行数据分析

     目的:从天气网站中爬取数据,生成excel表格,里面存储南昌市近十一年的天气情况,并对爬取产生的数据进行数据分析。   第一步:编写代码进行数据爬取 首先,导入 requests 模块,并调用函数 requests.get(),从天气的网站上面获 取该函数所需要的各种参数,然后对里面的参

    2024年02月04日
    浏览(42)
  • 淘宝商品数据爬取商品信息采集数据分析API接口

         数据采集是数据可视化分析的第一步,也是最基础的一步,数据采集的数量和质量越高,后面分析的准确的也就越高,我们来看一下淘宝网的数据该如何爬取。 点此获取淘宝API测试key密钥 淘宝网站是一个动态加载的网站,我们之前可以采用解析接口或者用Selenium自动化

    2024年03月11日
    浏览(70)
  • 豆瓣读书网站的数据爬取与分析

    目录 Python应用程序设计 豆瓣读书网站的数据爬取与分析 一、 项目背景与需求分析 二、数据抓取与分析 三、数据库设计 四、展示系统 选题背景 本设计作品选取了豆瓣读书网站,主要爬取的是豆瓣读书的TOP250,通过爬取的数据进行对信息的进一步的数据分析。豆瓣读书TOP25

    2024年02月09日
    浏览(72)
  • Python爬取180天的天气信息及数据分析

    这篇文章记录以下两点: 1.获取天气信息的方法和步骤以及遇到的问题和改进方法 2.获取到天气信息后进行数据清洗和可视化展示 总的来说,就是将网站中的天气信息通过爬虫技术保存在文件中,再通过对文件中的文本数据进行处理后用图表方式展现出来。 1.选定网址 (1)

    2024年02月08日
    浏览(54)
  • 爬取微博热搜榜并进行数据分析

    :爬取微博热搜榜数据。 用requests库访问页面用get方法获取页面资源,登录页面对页面HTML进行分析,用beautifulsoup库获取并提取自己所需要的信息。再讲数据保存到CSV文件中,进行数据清洗,数据可视化分析,绘制数据图表,并用最小二乘法进行拟合分析。 :通过观察页面HT

    2024年02月15日
    浏览(55)
  • Python爬取天气数据并进行分析与预测

    随着全球气候的不断变化,对于天气数据的获取、分析和预测显得越来越重要。本文将介绍如何使用Python编写一个简单而强大的天气数据爬虫,并结合相关库实现对历史和当前天气数据进行分析以及未来趋势预测。 1 、数据源选择 选择可靠丰富的公开API或网站作为我们所需的

    2024年02月09日
    浏览(51)
  • 基于python的旅游信息爬取以及数据分析

    收藏和点赞,您的关注是我创作的动力   随着计算机网络技术的发展,近年来,新的编程语言层出不穷,python语言就是近些年来最为火爆的一门语言,python语言,相对于其他高级语言而言,python有着更加便捷实用的模块以及库,具有语法简单,语句清晰的特点,使得它在代

    2024年02月04日
    浏览(57)
  • 分享一个Python Django影片数据爬取与数据分析系统源码

    💕💕 作者:计算机源码社 💕💕 个人简介:本人七年开发经验,擅长Java、Python、PHP、.NET、微信小程序、爬虫、大数据等,大家有这一块的问题可以一起交流! 💕💕 学习资料、程序开发、技术解答、文档报告 💕💕JavaWeb项目 💕💕微信小程序项目 💕💕Python项目 💕💕

    2024年02月09日
    浏览(46)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包