关于爬虫数据存储问题,通常可以有三种选择:
1.文本文件(txt,json)或excel文件(csv,xlsx)
优势:使用方便,不需要第三方支持
劣势:健壮性差,扩展性差
2.数据库(mysql,mongoDB,redis,oracle…)
优势:良好的扩展性,使用广泛
劣势:需要第三方支持,对技术有一定要求
3.文件系统(hadoop)
更自由,但技术要求会更高
接下来,我们将就上述几个常用的数据存储方式进行学习。
目录
1. 文件存储
读写文件是最常见的IO操作。Python内置了读写文件的函数。
在磁盘上读写文件的功能实际上是由操作系统提供的,读写文件就是请求操作系统打开一个文件对象,然后通过操作系统提供的接口从这个文件对象中读取数据(读文件),或者把数据写入这个文件对象(写文件)。
1)打开文件
使用Python内置的open()函数,传入文件名和标示符:f = open('test.txt', 'r')。如果文件不存在,open()函数就会抛出一个IOError的错误。
2)读文件
调用read()方法可以一次读取文件的全部内容,Python把内容读到内存,用一个str对象表示:f.read()
3)写文件
写文件函数:f.write(‘Hello, world!’) 可以将字符串写入到打开的文件中,但通常不会立刻写入磁盘,而是放到内存缓存起来,在调用close()方法时,才把没有写入的数据全部写入磁盘。
4)关闭文件
无论是读还是写,文件使用完毕后必须关闭,因为文件对象会占用操作系统的资源,并且同一时间能打开的文件数量是有限的:f.close()
由于文件读写时都有可能产生IOError,一旦出错,后面的f.close()就不会调用。所以,为了保证无论是否出错都能正确地关闭文件,使用try ... finally来实现:
try:
f = open('test.txt', 'r')
print(f.read()) #输出test.txt中的全部内容
finally:
if f:
f.close()
但是每次都这么写实在太繁琐,所以,Python引入了with语句来自动调用close()方法:
with open('test.txt', 'a', encoding='utf-8') as f:
print(f.read())
f.write(data)
1.1 txt、json
- txt文件
with open('data.txt','a',encoding='utf-8') as f:
如果文件很小,read()一次性读取最方便.
如果不能确定文件大小,反复调用read(size)比较保险(每次读size个字符)
如果是配置文件,调用readlines()最方便;(按行读,存储到列表中,列表的每一个元素对应文件的一行)
如果是大文件,调用readline()最方便。(读取文件第一行)
标识符:
主要方法:
注意:如果文件以a或a+的模型打开,每次进行写操作时,文件操作标记会自动返回到文件末尾,进行追加。
实例:
#将字符串"hello world"和"I love python"追加到data.txt中
data1 = "hello world"
data2 = "I love python"
with open('data.txt', 'a', encoding='utf-8') as f:
f.write(data1 + "\n")
f.write(data2 + "\n")
#读取data.txt中前3个字符
with open('data.txt', 'r', encoding='utf-8') as f:
print(f.read(3)) #hel
#读取data.txt中第一行字符
with open('data.txt', 'r', encoding='utf-8') as f:
print(f.readline()) #hello world
#读取data.