爬虫数据储存:JSON,CSV

json一般在网络交互时用到较多

在线JSON解析及格式化网站 在这个网站里,把你爬下来的json格式数据复制进去,能以易于阅读的方式展示

JSON字符串介绍

注意本质上json就是一个字符串。json是一种轻量级的数据交换格式(详情见百科)
json支持数据格式:

  1. 对象(字典) :使用花括号
  2. 数组(列表) :使用方括号
  3. 字符串类型: 字符串必须使用双引号
  4. 整形,浮点型,布尔类型,NULL类型多个数据之间使用逗号分开

python对象转json

  1. dump函数,传入一个文件指针,直接将字符串dump到文件中。
import json

books = [
    {
        "name": "三国演义",
        "price": 18.8                 # python对象不用严格遵循json格式,转换成json时会自动转换。
    },
{
        "name": "水浒传",
        'price': 19.9,
    }
]

result = json.dumps(books,ensure_ascii=False)       # json之传输ASCII码,让文字出现就打开这个参数
print(result)
print(type(result))
>>>
[{"name": "三国演义", "price": 18.8}, {"name": "水浒传", "price": 19.9}]
<class 'str'>

fp = open("books.json",'w',encoding='utf-8')
json.dump(books,fp,ensure_ascii=True)         # dump 是对文件的操作
fp.close()

json转python

import json

json_str = '[{"name": "三国演义", "price": 18.8}, {"name": "水浒传", "price": 19.9}]'

print(type(json_str))
result = json.loads(json_str)
print(result)
print(type(result))
>>>
<class 'str'>
[{'name': '三国演义', 'price': 18.8}, {'name': '水浒传', 'price': 19.9}]
<class 'list'>         # 转换成列表形式


with open("books.json",'r',encoding='utf-8') as fp:
    result = json.load(fp)
    print(result)
    print(type(result))

CSV文件

CSV (逗号分隔值文件格式) 编辑 讨论4
本词条由“科普中国”科学百科词条编写与应用工作项目 审核 。
逗号分隔值(Comma-Separated Values,CSV,有时也称为字符分隔值,因为分隔字符也可以不是逗号),其文件以纯文本形式存储表格数据(数字和文本)。纯文本意味着该文件是一个字符序列,不含必须像二进制数字那样被解读的数据。CSV文件由任意数目的记录组成,记录间以某种换行符分隔;每条记录由字段组成,字段间的分隔符是其它字符或字符串,最常见的是逗号或制表符。通常,所有记录都有完全相同的字段序列。通常都是纯文本文件。建议使用WORDPAD或是记事本来开启,再则先另存新档后用EXCEL开启,也是方法之一。

1. 读取csv 文件

import csv

with open("stock.csv",'r',encoding='gbk') as fp:   #   CSV文件使用GBK 格式,如果出现乱码还是用utf-8吧
    reader = csv.reader(fp)                           #  返回一个迭代器
    for x in reader:
        print(x[3])            # 得到列表,通过下标方式得到元素。获得的是一列元素


with open("stock.csv",'r',encoding='gbk') as fp:
    reader = csv.DictReader(fp)               # 直接通过列的名字获取
    for x in reader:
        print(x['secShortName'])      # 得到一个字典,获得头为secShortName列下的数据

2. 写入CSV文件

  • 使用writerow:写入数据到csv文件,需要创建一个writer对象。主要使用两个方法,一个是writerow 写入一行,writerows 写入多行。
import csv

headers = ('name','age','height')
students = [
    ("张三",18,180),
    ("李四",19,190),
    ("王五",20,170)]
with open("students.csv",'w',encoding='utf-8',newline='') as fp: 
# csv标准库中的writerow在写入文件时会加入'\r\n'作为换行符,if newline is '',换行符不会被转化,就不会有额外的空行了。。。。
    writer = csv.writer(fp)
    writer.writerow(headers)     # 写入表头
    writer.writerows(students)               # 写入数据
  • 使用DictWriter:使用字典的方式把数据写入进去,这样就需要DictWriter。
headers = ('name','age','height')
students = [
    {"name":"张三","age":18,"height":180},
    {"name":"李四","age":19,"height":190},
    {"name":"王五","age":20,"height":170}
]

with open("students.csv",'w',encoding='utf-8',newline='') as fp:       
    writer = csv.DictWriter(fp,headers)
    # 虽然DictWriter创建的时候有一个headers,但是想要写入数据进去,还是需要调用
    # writer.writeheader()方法,否则,表头数据写入不进去
    writer.writeheader()
    writer.writerows(students)
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值