树莓派论坛

 找回密码
 立即注册

爬虫数据文件存储要点之JSON

xiaotaomi 发表于 2020-5-19 17:33:55 | 显示全部楼层 |阅读模式

我们程序爬取到的信息肯定是需要保存到本地的,保存信息的方式有数据库和文件的形式,保存文件的常用格式就比较多,如 JSON、CSV、TXT、图⽚、视频、⾳频等,常用的一些库有 csv、xlwt、json、pandas、pickle、python-docx 等,这里我我们了解下JSON格式的使用,
JSON(JavaScript Object Notation, JS 对象简谱) 是一种轻量级的数据交换格式。它基于 ECMAScript (欧洲计算机协会制定的js规范)的一个子集,采用完全独立于编程语言的文本格式来存储和表示数据。简洁和清晰的层次结构使得 JSON 成为理想的数据交换语言。 易于人阅读和编写,同时也易于机器解析和生成,并有效地提升网络传输效率。
首先我们是保存爬取到的数据,自然就需要要写爬虫,这里简单的示例下,提取信息我就直接放代码了,用的BeautifulSoup的节点选择器和方法选择器。
import jsonimport csvimport lxmlimport requestsfrom bs4 import BeautifulSoup as BSresponse = 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)


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


结果:

注意的:
1 json.dumps将Python对象编码成JSON字符串
2 josn.loads 将已经编码的json字符串变为python对象。(网上抓包得到的json数据,需要解码成python对象,再进行后续处理)

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版 | Archiver | 树莓派论坛 ( 粤ICP备15075382号-1 )