萝卜头IT论坛

了解更多
搜索
查看: 111|回复: 0
收起左侧

[每日话题] 爬虫数据文件存储要点之JSON

[复制链接]
发表于 2020-5-19 17:31:53 | 显示全部楼层 |阅读模式

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

使用道具 举报

联系站长(Contact)|萝卜头IT论坛 ( 苏ICP备15050961号-1 )

GMT+8, 2020-6-5 21:16 , Processed in 0.089070 second(s), 19 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表