关于python:0基础学爬虫爬虫基础之文件存储

2次阅读

共计 4417 个字符,预计需要花费 12 分钟才能阅读完成。

大数据时代,各行各业对数据采集的需要日益增多,网络爬虫的使用也更为宽泛,越来越多的人开始学习网络爬虫这项技术,K 哥爬虫此前曾经推出不少爬虫进阶、逆向相干文章,为实现从易到难全方位笼罩,特设【0 根底学爬虫】专栏,帮忙小白疾速入门爬虫,本期为文件存储。

概述

前几期文章中咱们曾经理解到了申请库、解析库的应用,曾经学会了如何向指标网站发送申请以及解析响应信息,那么咱们还须要晓得如何将数据进行存储。数据存储有很多形式,本期会介绍如何将数据存入文本文件,如 TXT、JSON、CSV 等。

TXT 文件存储

介绍

TXT 文件存储是最根本的数据存储形式,TXT 文本文件基本上兼容任何平台,因而它的利用也十分宽泛。应用代码操作 TXT 文件非常简略,然而毛病也非常明显,不利于对数据进行检索。

应用

Python 中操作 TXT 文件须要应用到内置的 open() 函数。

open(file, mode='r', buffering=None, encoding=None, errors=None, newline=None, closefd=True)

open() 函数有七个参数别离为:

file:文件门路

mode:打开方式,默认为(r)只读模式

buffering:文件缓冲

encoding:字符编码

errors:报错级别

newline:换行模式,默认以 \n 换行

closefd:管制在敞开文件时是否彻底敞开文件

文件打开方式分为以下几种:

r:以只读形式关上文件

w:以写入形式关上文件。如果文件存在则笼罩原文件,不存在则新建。

x:创立新文件并以写入形式关上文件

a:以追加形式关上文件。如果文件存在,则在结尾地位写入,不存在则新建。

b:二进制模式

t:文本模式

+:读取与写入

wb:以二进制写入形式关上文件。如果文件存在则笼罩原文件,不存在则新建。

w+:以读写形式关上文件。如果文件存在则笼罩原文件,不存在则新建。

wb+:以二进制读写形式关上文件。如果文件存在则笼罩原文件,不存在则新建。

ab:以二进制追加形式关上文件。如果文件存在,则在结尾地位写入,不存在则新建。

ab+:以二进制追加读写形式关上文件。如果文件存在,则在结尾地位写入,不存在则新建。

f = open('data.txt','r',encoding="utf-8")
f.seek(2) #从指定下标地位开始读取
data = f.read()
f.close()
f = open('data.txt','w',encoding="utf-8")
f.write('hello')
f.write(' ')
f.write('world')
f.close()
#hello world

上下文管理器

上文中能够看到,对一个文件进行读写操作后须要应用 close() 办法敞开文件。如果不应用 close() 敞开文件会导致资源泄露问题。为了防止这个问题和优化代码,咱们能够应用上下文管理器来操作文件。

with open('data.txt','w',encoding='uutf-8')as f:
    f.write('hello')
    f.write(' ')
    f.write('world')

当 with 语句块完结后文件会主动敞开,这样不须要再调用 close() 办法。

JSON 文件存储

介绍

JSON 全称为 JavaScript Object Notation,也就是 JavaScript 对象标记,是一种轻量级的数据交换格局。人们能够很容易的对 JSON 格局的数据进行浏览和编写,同时也不便了机器进行解析和生成。JSON 采纳齐全独立于程序语言的文本格式,然而也应用了类 C 语言的习惯(包含 C, C++, C#, Java, JavaScript, Perl, Python 等)。这些个性使 JSON 成为现实的数据交换语言。

JSON 通过对象和数组的组合来示意数据,而在 JavaScript 中,所有皆为对象,因而任何数据类型都能够通过 JSON 来示意。

在 JavaScript 中 JSON 通常以对象或数组的模式存在。对象模式为被花括号包裹的键值对构造,如 {key1 : value1, key2 : value2},key 示意对象的属性,value 示意对象的值。数组模式与对象模式的区别就在于它是被方括号所包裹,如 [{key1 : value1}, {key2 : value2}]。对象模式与数组模式能够自由组合,任意嵌套。JSON 中字符串类型的数据须要以双引号突围。

JSON 的这种构造十分简洁清晰,且结构化水平很高,因此被宽泛应用。

应用

JSON 是一个数据格式,实质上是纯字符串类型,在 Python 中它能够被转换为对应的数据类型,如对象模式能够被转换为字典,数组类型能够转换为列表。Python 中内置了一个弱小的 JSON 库,通过它能够简便的实现 JSON 文件的读写操作。

JSON 库进步了四个办法:

json.dump():将 JSON 对象写入文件

json.dumps():将 Python 对象编码成 JSON 字符串

json.load():从 JSON 文件中读取数据

json.loads():将已编码的 JSON 字符串解码为 Python 对象

上面咱们以这段数据作为示例:

{
  "1001": {
    "name": "张三",
    "age": 21,
    "gender": "female"
  },
  "1002": {
    "name": "李四",
    "age": 22,
    "gender": "male"
  }
}

读取数据

data.json 文件内容为示例 JSON 数据。

with open('data.json','r',encoding='utf-8')as f:
    data = f.read()
    
print(type(data))
#输入:<class 'str'>

能够看到,咱们间接从 JSON 文件外面读取的数据是字符串类型,这不利于咱们对它进行操作,咱们能够应用 json.loads() 办法将 JSON 字符串转换为字典类型。

import json

with open('data.json','r',encoding='utf-8')as f:
    data = f.read()
    
print(type(data))
data = json.loads(data)
print(type(data))
#输入:#<class 'str'>
#<class 'dict'>

咱们也能够应用更加简洁的写法,通过 json.load(),间接对文件操作对象进行解析。

import json

data = json.load(open('data.json',encoding='utf-8'))

print(type(data))
#输入:<class 'dict'>

写入数据

应用 write() 办法写入文件时,它只能传入字符串类型的数据。因而咱们须要将字典数据先转换为 JSON 字符串,能够通过 json.dumps() 办法实现。

import json

data = {
  "1001": {
    "name": "张三",
    "age": 21,
    "gender": "female"
  },
  "1002": {
    "name": "李四",
    "age": 22,
    "gender": "male"
  }
}

print(data)
data = json.dumps(data)
print(type(data))
with open('data.json','w',encoding="utf-8")as f:
    f.write(data)
#输入:#<class 'dict'>
#<class 'str'>

当然,将数据写入文件也有更加简便的办法。

import json

data = {
  "1001": {
    "name": "张三",
    "age": 21,
    "gender": "female"
  },
  "1002": {
    "name": "李四",
    "age": 22,
    "gender": "male"
  }
}

json.dump(data,open('data.json','w',encoding='utf-8'),indent=2,ensure_ascii=False)

CSV 文件存储

介绍

CSV 全称 Comma-Sparated Values(逗号分隔值),它以纯文本模式存储数据表格。CSV 文件是一个字符序列,它由任意数目的记录组成,记录之间以某种换行符分隔。文件的每条记录由字段和字段值组成,字段间的分隔符是其它字符或字符串,最常见的是逗号或制表符。CSV 并不是一种繁多的、明确定义的文本格式,它泛指具备以下特色的任何文件:

  1. 纯文本呢,应用某个字符集
  2. 由记录组成
  3. 每条记录被分隔符分隔为字段
  4. 每条记录都有雷同的字段序列

应用

Python 中提供了一个内置的 csv 库来对 CSV 文件进行操作。

写入

import csv

#writerow 默认换行,因而须要通过 newline 将换行符设置为空,防止反复换行
with open('data.csv','w',encoding='utf-8',newline="") as csvfile:
    #delimiter:指定分隔符,默认为逗号
    writer = csv.writer(csvfile,delimiter = " ")
    #写入一行
    writer.writerow(['id', 'name', 'age'])
    writer.writerow(['1001', 'jack', 15])
    writer.writerow(['1002', 'marin', 22])
    writer.writerow(['1003', 'alex', 19])
    #写入多行
    writer.writerows([['1004', 'lucy', 23],['1005', 'john', 30]])

csv 库也提供了其它的写入办法

import csv

with open('data.csv','w',encoding='utf-8',newline="") as csvfile:
    #字典写入对象
    writer = csv.DictWriter(csvfile,fieldnames=['id','name','age'])
    writer.writeheader()
    writer.writerow({'id':'1001','name':'jack','age':21})
    writer.writerow({'id': '1002', 'name': 'marin', 'age': 22})
    writer.writerows([{'id': '1003', 'name': 'lucy', 'age': 23},{'id': '1004', 'name': 'mike', 'age': 22}])

读取

import csv

with open('data.csv','r',encoding='utf-8')as csvfile:
    reader = csv.reader(csvfile)
    for row in reader:
        print(row)

总结

上文中讲到了 TXT、JSON、CSV 三种文件的存储形式,介绍了如何对这些文件进行读写操作。文本文件存储的劣势在于简略、不便,适宜存储大量信息,但想要标准的贮存数据的话并不举荐应用文本文件贮存。

正文完
 0