美文网首页Python
python爬虫-存储数据-txt、json、csv

python爬虫-存储数据-txt、json、csv

作者: DKider | 来源:发表于2019-03-23 20:07 被阅读10次

在爬虫中,我们需要将获取到的数据存储到文件中,这样数据就可以保存在本地了。当然数据也可以存储在数据库中。
今天我们就来看看如何把爬到的文件保存到本地。

首先我们是保存爬取到的数据,自然要写爬虫,书上说的是知乎的发现页的信息,我试了试,知乎的反爬虫还是很厉害的,没成功,400。所以我就将源码直接保存到本地html.txt,省去了请求页面的一步,直接从本地打开。
提取信息我就直接放代码了,用的BeautifulSoup的节点选择器和方法选择器。

import json
import csv
import lxml
import requests
from bs4 import BeautifulSoup as BS

response = open('html.txt',encoding='utf-8')
bsobj = BS(response, 'lxml')
items = bsobj.find_all('div', class_='explore-feed feed-item', )
for item in items:
    question = item.a.string
    author = item.find(name='a', class_='author-link').get_text()
    answer = item.textarea.string
    info = [question,author,answer,]
    dict = {'question':question, 'author':author, 'answer':answer}
    save_as_txt(info)
    save_as_json(dict)
    save_as_csv(info)

可以看到后面的三行就是我们今天要完成的三种存储方式:

TXT:

txt文件是一种跨平台的文件格式,几乎所有系统都支持这种文件,自然是我么存储信息的好帮手,但是txt在索引方面就不那么行了。
我们用open()函数打开文件,并新建一个文件对象file,然后写入文本,然后关闭这个文件。

file = open('info.txt', 'a', encoding='utf-8')
file.write('Hello world!')
file.write('\n')
file.close()

上面的程序我们打开了当前目录下的‘info.txt’文件,并制定打开方式为追加,编码格式为‘utf-8’。
文件目录可以是绝对路径,也可以是相对路径。
打开方式总分为三种——r,w,a,r是只读模式,w是写入模式,a是追加模式,每种模式又有4种不同方式,以r为例:r,rb,r+,rb+。

  • r——只读模式打开(read),打开时指针在文件首部,文件要存在,这是默认的模式
  • w——写入模式打开(write),若文件存在,则覆盖它,不存在则新建文件
  • a——追加模式打开(add),若文件存在则,在文件尾部开始写入,不存在则新建文件

而b+\b+
可以这么记:b就是以二进制打开,+就是以读写模式打开,然后在加上r\w\a的特性即可。

以r为例:

  • rb——二进制只读
  • r+——读写模式
  • rb+——二进制读写
    其他以此类推。

在文件读写时更加建议使用with语句来读写文件,这样就避免了忘记关闭文件的情况,而导致数据丢失。

现在我们就可以将获得的文件存储到txt文件中了

def save_as_txt(list):
    filename = 'info.txt'
    with open(filename, 'a',encoding='utf-8') as file:
        file.write('\n'.join(list))

输入列表,存入txt

结果:


txt
JSON

json 全称为:JavaScript object notation,json我们主要用两个方法:
loads(string)读取

dumps(data, indent=4, ensure_ascii=False)输出

indent 是为了美化输入,是缩进4格
ensure_ascii是为了能够显示中文,否则中文会显示为Unicode字
我们接受一个字典作为输入内容,追加模式写入

def save_as_json(dict):
    filename = 'info.json'
    with open(filename, 'a',encoding='utf-8') as file:
        file.write(json.dumps(dict, indent=4, ensure_ascii=False)+',\n')

结果:


json json
csv

csv是以纯文本的格式存储表格数据,它相比庞大的excel要小很多,它并不包含函数,公式,等内容。
写入用csv.writer()对象,读取用csv.reader()对象。

filename = 'info.csv'
with open(filename, 'w', encoding='utf-8') as file:
    writer = csv.writer(file)
    writer.writerow(['question', 'author', 'answer'])

def save_as_csv(list):
    filename = 'info.csv'
    with open(filename, 'a', encoding='utf-8') as file:
        writer = csv.writer(file)
        writer.writerow(list)

为了防止重复的存储键值,我就把新建键值放前面,单独拿出去了。

结果:


csv

相关文章

网友评论

    本文标题:python爬虫-存储数据-txt、json、csv

    本文链接:https://www.haomeiwen.com/subject/rvxevqtx.html