python数据存储--JSON
HTML正文存储为两种格式:JSON和CSV。
存储为JSON:
- 首先利用Requests访问http://seputu.com获取HTML文档:
#!coding:utf-8
import requests
import json
from bs4 import BeautifulSoup
user_agent = 'Mozilla/4.0 (compatible; MSIE 5.5; Windows NT)'
headers = {'User-agent': user_agent}
r = requests.get('http://seputu.com',headers)
r.encoding="utf-8"#指定编码方式
print r.text
- 取每章节<div class="mulu">中的h2标签和<div class="box">中的<a>中
soup = BeautifulSoup(r.text,'html.parser',from_encoding='utf-8')
for mulu in soup.find_all(class_="mulu"):
h2 = mulu.find('h2')
if h2!=None:
h2_title = h2.string#获取标题
for a in mulu.find(class_='box').find_all('a'):#获取所有的a标签中url和章节内容
href = a.get('href')
box_title = a.get('title')
print href,box_title
接下来将数据存储为JSON。
- python对JSON文件的操作分为编码和解码,通过JSON模块实现,编码是指python对象转换成JSON对象过程,使用的函数是dumps和dump。两个函数区别在于dump把python对象转换成JSON对象,并将JSON对象通过fp文件流入文件中,而dumps则生成一个字符串:
dumps (obj,skipkeys=False, ensure. ascii=True, check_ circular=True,
allow_ nan=True, c1s=None, indent =None, separators=None,encoding= 'utf-8', de fault=None, sort_ keys=False, **kw)
dump(obj, fp, skipkeys=False, ensure_ ascii=True, check_ circular=True ,
allow_ nan=True, cls=None, indent=None, separators=None,encoding='utf-8', default=None, sort_ keys=False, **kw) :
常用参数分析:
口Skipkeys:默认值是False。如果dict的keys内的数据不是python的基本类型( str、
unicode、int、 long、 float、 bool、 None), 设置为False时,就会报TypeError错误。此时设置成True,则会跳过这类key。
口ensure ascii:默认值True。如果dict内含有非ASCII的字符,则会以类似“\uXXXX”
的格式显示数据,设置成False后,就能正常显示。
口indent:应该是一一个非负的整型, 如果是0,或者为空,则一行显示数据,否则会换行
且按照indent的数量显示前面的空白,将JSON内容进行格式化显示。
口separators:分隔符,实际上是( tem separator, dict separator) 的一个元组, 默认的就是
.),这表示dictionary内keys之间用“,”隔开,而key和value之间用“:”隔开。
口encoding:默认是UTF-8。设置JSON数据的编码方式,在处理中文时一一定要注意。
sort. keys:将数据根据keys的值进行排序。
- 总的代码
#!coding:utf-8
import requests
import json
from bs4 import BeautifulSoup
user_agent = 'Mozilla/4.0 (compatible; MSIE 5.5; Windows NT)'
headers = {'User-agent': user_agent}
r = requests.get('http://seputu.com',headers)
r.encoding="utf-8"
print r.text
content=[]
soup = BeautifulSoup(r.text,'html.parser',from_encoding='utf-8')
for mulu in soup.find_all(class_="mulu"):
h2 = mulu.find('h2')
if h2!=None:
h2_title = h2.string#获取标题
list=[]
for a in mulu.find(class_='box').find_all('a'):#获取所有的a标签中url和章节内容
href = a.get('href')
box_title = a.get('title')
print href,box_title
list.append({'href':href,'box_title':box_title})
content.append({'title':h2_title,'content':list})
with open('guguobao.json','wb') as fp:
json.dump(content,fp=fp,indent=4)
解码过程是把json对象转换成python对象的一个过程,常见函数是load和loads函数,区别和dump与dumps是一样的,函数原型:
loads (s,encoding=None, cls=None,object_ hook=None, parse_ float =None ,parse_ int =None,parse_ constant=None, object_ pairs_ hook=None, * * kw)
load(fp,encoding=None, cls=None, object_ hook=None, parse_ float =None,parse_ int=None, parse_ constant=None, object_ pairs_ hook=None, **kw)
常用参数分析:
encoding:指定编码格式。
parse float: 如果指定,将把每一个JSON字符串按照float 解码调用。默认情况下,
这相当于float(num str)。
口
parse int: 如果指定,将把每一个JSON字符串按照int解码调用。默认情况下,这相
当于int(num str)。
示例如下:
new_ str=json.loads (json_ str)
print new_ str
with open('guguobao.txt', 'r') as fp:
print json.load(fp)
输出结果:
[{u username': u'\u4e03\u591c', u'age': 24},[2,3], 11]
[{u username': u'\u4e03\u591c', u'age': 24},[2,3],11]
通过上面的例子可以看到,Python的一些基本类型通过编码之后,tuple类型就转成了list类型了,再将其转回为python对象时,list 类刑也并没有转回成tuple类型,而且编码格式也发生了变化,变成了Unicode编码。具体转化时,类型变化规则如表5-1和表5-2所示。
表5-1 Python --> JSON
| Python | JSON |
|---|---|
| dict | Object |
| list, tuple | array |
| str, unicode | string |
| int, long, float | number |
| True | true |
| Flase | false |
| None | null |
表5-2 JSON --->Python
| JSON | Python |
|---|---|
| object | dict |
| array | list |
| string | unicode |
| number (int) | int, long |
| number (real ) | float |
| true | True |
| false | False |
| nu11 | None |
python数据存储--JSON的更多相关文章
- Python中的文件处理和数据存储json
前言:每当需要分析或修改存储在文件中的信息时,读取文件都很有用,对数据分析应用程序来说尤其如此. 例如,你可以编写一个这样的程序:读取一个文本文件的内容,重新设置这些数据的格式并将其写入文件,让浏览器 ...
- python爬虫#数据存储#JSON/CSV/MYSQL/MongoDB/
Json数据处理 JSON支持数据格式: 对象(字典).使用花括号. 数组(列表).使用方括号. 整形.浮点型.布尔类型还有null类型. 字符串类型(字符串必须要用双引号,不能用单引号). 多个数据 ...
- python数据存储技巧
1.文本存储 比如我们现在有10篇文章,每篇文章由三部分组成,题目,作者,内容(title,author,content),然后要求这三个部分明确展示出来,并且每篇文章之间用=====分割. 大致思路 ...
- Python数据存储:pickle模块的使用讲解
在机器学习中,我们常常需要把训练好的模型存储起来,这样在进行决策时直接将模型读出,而不需要重新训练模型,这样就大大节约了时间.Python提供的pickle模块就很好地解决了这个问题,它可以序列化对象 ...
- python数据存储-- CSV
CSV,其文件以纯文本形式存储表格数据(数字和文本),CSV记录简由某种换行符分隔字段间分隔又其他字符,常见逗号或者制表符, 例如: #coding:utf-8 import csv headers ...
- [转]pickle python数据存储
python的pickle模块实现了基本的数据序列和反序列化.通过pickle模块的序列化操作我们能够将程序中运行的对象信息保存到文件中去,永久存储:通过pickle模块的反序列化操作,我们能够从文件 ...
- Python数据存储 — MySQL数据库操作
本地安装MySQL 调试环境python3.6,调试python操作mysql数据库,首先要在本地或服务器安装mysql数据库. 安装参考:https://mp.csdn.net/postedit/8 ...
- python 数据写入json文件时中文显示Unicode编码问题
一.问题描述 import json dir = { '春晓':'asfffa', '春眠不觉晓' : '处处闻啼鸟', '夜来风雨声' : 56789, 'asdga':'asdasda' } fp ...
- js数据持久化本地数据存储-JSON.parse和JSON.stringify的区别
JSON.stringify()的作用是将 JavaScript 值转换为 JSON 字符串, 而JSON.parse()可以将JSON字符串转为一个对象. 简单点说,它们的作用是相对的,我用JSON ...
随机推荐
- python学习笔记-(十三)线程、进程、多线程&多进程
为了方便大家理解下面的知识,可以先看一篇文章:http://www.ruanyifeng.com/blog/2013/04/processes_and_threads.html 线程 1.什么是线程? ...
- maven的配置和eclipse maven插件安装
1.下载maven:http://maven.apache.org/download.cgi 2. 配置环境变量: 3. 修改maven文件夹下bin/conf/settings.xml:maven仓 ...
- java 内部类(简单使用)
什么是内部类 1.内部类是指在一个外部类的内部再定义一个类. 2.内部类作为外部类的一个成员,依附于外部类而存在. 3.内部类可为静态,可用protected和private修饰(而外部类只能使用pu ...
- BZOJ 1692: [Usaco2007 Dec]队列变换 (后缀数组/二分+Hash)
跟BZOJ 4278: [ONTAK2015]Tasowanie一模一样 SA的做法就是把原串倒过来接在原串后面,O(nlogn)O(nlogn)O(nlogn)做后缀数组,就能O(1)O(1)O(1 ...
- java mybaits 调用存储过程
@Override public BaseResultMessage saveOrderConfirm(String billNo) { BaseResultMessage rm = Utils.re ...
- Linux硬盘安装步骤
网上找了许多用DVD镜像硬盘安装FC5的文章,可是都不系统,为了全中国的广大菜鸟们,云计算架构师 抽了很多时间来写这篇详细的安装文章,希望对初次接触LINUX或者刚刚入门的朋友有所帮助. 一.预备知识 ...
- 【Python之路】特别篇--生成器(constructor)、迭代器(iterator)、可迭代对象(iterable)
生成器(constructor) 生成器函数在Python中与迭代器协议的概念联系在一起.包含yield语句的函数会被特地编译成生成器 !!! 当函数被调用时,他们返回一个生成器对象,这个对象支持迭代 ...
- 利用msyqlfont + plsql 客户端 完成msyql数据向oracle的转移
方法一: 1.这是mysqlfont 连接工具 ,选中表右键点击 输出->csv文件 2.选择导出的文件为ANSI型,因为csv文件excel打开的默认编码方式为ANSI这样可以防止中文在exc ...
- 最近公共祖先LCA(Tarjan算法)的思考和算法实现——转载自Vendetta Blogs
LCA 最近公共祖先 Tarjan(离线)算法的基本思路及其算法实现 小广告:METO CODE 安溪一中信息学在线评测系统(OJ) //由于这是第一篇博客..有点瑕疵...比如我把false写成了f ...
- 灰度图像--图像分割 Canny边缘检测
学习DIP第48天 **转载请标明本文出处:http://blog.csdn.net/tonyshengtan ,出于尊重文章作者的劳动,转载请标明出处!文章代码已托管,欢迎共同开发: https:/ ...