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

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

今天我们就来看看如何把爬到的文件保存到本地。

首先我们是保存爬取到的数据,自然要写爬虫,书上说的是知乎的发现页的信息,我试了试,知乎的反爬虫还是很厉害的,没成功,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

结果:

5a06b123035c?from=timeline

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')

结果:

5a06b123035c?from=timeline

json

5a06b123035c?from=timeline

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)

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

结果:

5a06b123035c?from=timeline

csv

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值