用解析器解析出数据之后,接下来就是存储数据了。保存的形式有很多,最简单的形式是直接保存为文本文件,如TXT、JSON、csv等。另外,还可以将这些数据保存到数据库中。
python中所有open()打开一个文件,文件的打开有很多模式:
- r:以只读方式打开文件,文件的指针将会放在文件的开头,这是默认模式。
- rb:以二进制只读方式打开一个文件,文件指针将会放在文件的开头。
- r+:以读写方式打开一个文件,文件指针将会放在文件的开头。
-** rb+**: 以二进制读写方式打开一个文件,文件指针将会放在文件的开头。 - w:以写入方式打开一个文件。如果该文件已存在,则将其瞿盖;如果该文件不存在,则创建新文件。
- wb:以二进制写入方式打开一个文件。如果该文件已存在,则将其覆盖;如果该文件不存在,则创建新文件。
- w+:以读写方式打开一个文件。如果该文件已存在,则将其覆盖;如果该文件不存在,则创建新文件。
- wb+:以二进制读写格式打开一个文件。如果该文件已存在,则将其覆盖;如果该文件不存在, 则创建新文件。
- a:以追加方式打开一个文件。如果该文件已存在,文件指针将会放在文件结尾。也就是说,新的内容将会被写入到已有内容之后;如果该文件不存在, 则创建新文件来写入。
- ab:以二进制追加方式打开一个文件。如果该文件已存在,则文件指针将会放在文件结尾。也就是说,新的内容将会被写入到己有内容之后;如果该文件不存在,则创建新文件来写入。
- a+:以读写方式打开一个文件。如果该文件已存在,文件指针将会放在文件的结尾。文件打开时会是追加模式;如果眩文件不存在,则创建新文件来读写。
- ab+:以二进制追加方式打开一个文件。如果该文件已存在,则文件指针将会放在文件结尾;如果该文件不存在,则创建新文件用于读写。
TXT 文本的操作非常简单,且其几乎兼容任何平台,但是它有个缺点,那就是不利于检索。
事实上,一般来讲,文件写入这个动作还有一种简化写法,就是使用with as语法,在with 控制块结束时,文件会自动关闭,所以就不需要再调用close()方法了。
读取json数据
Python为我们提供了简单易用的JSON库来实现JSON文件的读写操作,我们可以调用JSON库的loads()方法将JSON文本字符串转为JSON对象,也可以通过dumps()方法将JSON对象转为文本字符串。
json内的数据需要使用双引号包围,不能使用单引号。
当然,也可以从文件读取json字符串信息:
输出json数据
data.json文件中的内容如下:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Tr2PR6Kl-1640339861361)(https://note.youdao.com/yws/public/resource/f8e5908c0721dddb3fd530cf29cb1b8e/xmlnote/WEBRESOURCE5c55acb5ef08952f68989ff660a19fed/42821 “”)]
Csv(Comma-Separated Values,逗号分隔值或字符分隔值),其文件以纯文
本形式存储表格数据。该文件是一个字符序列,可以由任意数目的记录组成,记录间以某种换行符分隔。每条记录由字段组成,字段间的分隔符是其他字符或字符串,最常见的是逗号或制表符。不过所有记录都有完全相同的字段序列,相当于一个结构化表的纯文本形式。它比Excel文件更加简介,XLS是电子表格,它包含了文本、数值、公式和格式等内容,而csv 中不包含这些内容,就是字符分隔的纯文本,保存最基本的表格数据信息,结构简单清晰。
写入CSV数据
此时data.csv文件的内容如下:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-sdSkBwIx-1640339861362)(https://note.youdao.com/yws/public/resource/f8e5908c0721dddb3fd530cf29cb1b8e/xmlnote/WEBRESOURCE726e279bee28d8071543b7a812f60258/42835 “”)]
上面的程序中没有指明CSV的分隔符,所以使用的是默认的逗号,如果想修改CSV文件中列与列之间的分隔符:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-dgtzpeK8-1640339861364)(https://note.youdao.com/yws/public/resource/f8e5908c0721dddb3fd530cf29cb1b8e/xmlnote/WEBRESOURCEf445bd3566bf3f3c9a461ed4bc816fb0/42837 “”)]
也可以使用writerows()一次性写入多行,当然,给它传入的参数是一个二维列表:
但是一般情况下,爬虫爬取的都是结构化数据,我们一般会用字典来表示,所以尽量使用csv库提供的DictWriter()向CSV文件中写字典入数据。