【python数据分析】将爬取的数据保存为csv格式

csv文件

一种用逗号分割来实现存储表格数据的文本文件。

python的csv模块

python遍历代码:

arr = [12, 5, 33, 4, 1]
#遍历输出1
for i in range(0, len(arr)):
    item = arr[i]
    print(item)

#遍历输出2
for item in arr:
    print(item)

#遍历输出3
string_arr = ["hi", "hello", "你好", "aloha"]
for item in string_arr:
    print("本次循环 item 变量的值", item)

从csv文件读取内容

用DictReader对象的创建方法以及通过filenames属性获取csv表格的表头。

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

获取表格实际内容。

fo = open("info.csv")
reader = csv.DictReader(fo)
#创建列表,存储读到的行
row_list = []
#遍历
for row in reader:
    row_list.append(row)
fo.close()
#打印
print(row_list[0])
#遍历row_list
for d in row_list:
    #d是字典,直接打印key为年龄值即可
    print(d["年龄"])
#打印

写入csv文件

python提供了DictWriter方法,可以讲表格数据以字典的形式存储到csv文件中。

import csv
#打开一个文件,假设是info.csv,写入所以是w
#newline='',写入时需要指定
fo = open("info2.csv", "w", newline='')
#将表头存储到一个列表里
header = ["姓名", "年龄", "部门"]
#创建一个DictWriter对象,第二个参数就是上面创建的表头
writer = csv.DictWriter(fo, header)
writer.writeheader()
#写入一行记录,以字典的形式,key需要与表头对应
writer.writerow({"姓名": "小明", "年龄":"28", "部门": "行政部"})
#关闭文件
fo.close()

运行后,相应的文件夹下会出现一个对应的csv文件。
在这里插入图片描述
也可以使用writer.writerows(row_list)来写入多个。

运用实例

数据准备

1、打开网页,读取内容,并创建相应的BeautifulSoup对象
2、找到包含新闻的div元素列表
3、从2中抽取标题
4、从2中抽取时间

from bs4 import 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

(记得要pip install bs4)

#输入参数是BeautifulSoup对象,返回包含新闻的div元素列表
def find_index_labels(doc):
    index_labels = doc.find_all("div", class_ = "indexs")
    return index_labels
#实现新闻标题的抽取函数
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()
#实现获取新闻发布时间的函数
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"]
#获取新闻标题与列表
#调用create_doc_from_filename函数
doc = create_doc_from_filename("jiandan.html")
#传入BeautifulSoup对象,将返回的div列表存储在index_labels中
index_labels = find_index_labels(doc)
for label_object in index_labels:
    title = get_title(label_object)
    pub_time = get_pub_time(label_object)
    print("标题", title)
    print("发布时间", pub_time)

在这里插入图片描述

将数据存为字典的形式

#获取新闻标题与列表
#调用create_doc_from_filename函数
doc = create_doc_from_filename("jiandan.html")
#传入BeautifulSoup对象,将返回的div列表存储在index_labels中
index_labels = find_index_labels(doc)
news_dict_list = []
for label_object in index_labels:
    title = get_title(label_object)
    pub_time = get_pub_time(label_object)
    news = {"标题": title, "发布时间": pub_time}
    news_dict_list.append(news)
print(news_dict_list)

在这里插入图片描述

存储到csv文件

#创建csv
fo = open("news.csv", "w", newline='', encoding='utf-8')
#表头
header = ["标题", "发布时间"]
writer = csv.DictWriter(fo, header)
#写入表头
writer.writeheader()
#将上一步的字典写入csv文件中
writer.writerows(news_dict_list)
fo.close()

在这里插入图片描述

### 使用Python爬虫抓取数据存储至CSV文件 #### 创建CSV文件与写入表头 为了便于理解和操作,先介绍如何利用`csv`库来创建一个新的CSV文件向其中写入表头信息。 ```python import csv with open('output.csv', mode='w', newline='', encoding='utf-8') as file: writer = csv.writer(file) writer.writerow(['Title', 'Link']) # 表头名称可以根据实际需求调整 ``` 此部分代码展示了打开一个名为`output.csv`的新文件的方式,在这里指定了编码为UTF-8以支持更多字符集[^2]。 #### 抓取网页内容 接下来展示的是通过简单的HTTP请求获取目标网站HTML源码的方法。这一步骤通常会依赖于第三方库如`requests`来进行网络请求发送工作。 ```python import requests url = "http://example.com" response = requests.get(url) if response.status_code == 200: html_content = response.text else: print(f"Failed to retrieve the page, status code {response.status_code}") ``` 这段脚本尝试访问指定URL地址所指向的页面,检查返回的状态码是否表示成功响应(即状态码等于200)[^1]。 #### 解析HTML文档提取所需信息 一旦获得了完整的HTML字符串之后,则需进一步分析其结构从而定位到感兴趣的内容片段。对于这类任务来说,BeautifulSoup是一个非常好用的选择之一。 ```python from bs4 import BeautifulSoup soup = BeautifulSoup(html_content, 'html.parser') items = soup.find_all('div', class_='item') data_list = [] for item in items: title = item.h2.a.string.strip() link = item.h2.a['href'] data_list.append([title, link]) ``` 上述代码段中定义了一个列表用于收集每条记录的信息;随后遍历所有符合条件(`class="item"`属性)下的`<div>`标签对象,从中抽取文章标题以及链接作为一对关联项加入集合内待后续处理。 #### 将抓取的数据追加到CSV文件里 最后就是把之前准备好的数据逐行添加进先前建立起来的那个表格当中去了: ```python with open('output.csv', mode='a', newline='', encoding='utf-8') as file: writer = csv.writer(file) for row in data_list: writer.writerow(row) ``` 此处采用追加模式(`mode='a'`)重新打开了同一份文件,确保不会覆盖掉原有的头部以及其他已经存在的记录。接着循环调用了writerow()方法依次写出每一行的实际值。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值