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的更多相关文章

  1. Python中的文件处理和数据存储json

    前言:每当需要分析或修改存储在文件中的信息时,读取文件都很有用,对数据分析应用程序来说尤其如此. 例如,你可以编写一个这样的程序:读取一个文本文件的内容,重新设置这些数据的格式并将其写入文件,让浏览器 ...

  2. python爬虫#数据存储#JSON/CSV/MYSQL/MongoDB/

    Json数据处理 JSON支持数据格式: 对象(字典).使用花括号. 数组(列表).使用方括号. 整形.浮点型.布尔类型还有null类型. 字符串类型(字符串必须要用双引号,不能用单引号). 多个数据 ...

  3. python数据存储技巧

    1.文本存储 比如我们现在有10篇文章,每篇文章由三部分组成,题目,作者,内容(title,author,content),然后要求这三个部分明确展示出来,并且每篇文章之间用=====分割. 大致思路 ...

  4. Python数据存储:pickle模块的使用讲解

    在机器学习中,我们常常需要把训练好的模型存储起来,这样在进行决策时直接将模型读出,而不需要重新训练模型,这样就大大节约了时间.Python提供的pickle模块就很好地解决了这个问题,它可以序列化对象 ...

  5. python数据存储-- CSV

    CSV,其文件以纯文本形式存储表格数据(数字和文本),CSV记录简由某种换行符分隔字段间分隔又其他字符,常见逗号或者制表符, 例如: #coding:utf-8 import csv headers ...

  6. [转]pickle python数据存储

    python的pickle模块实现了基本的数据序列和反序列化.通过pickle模块的序列化操作我们能够将程序中运行的对象信息保存到文件中去,永久存储:通过pickle模块的反序列化操作,我们能够从文件 ...

  7. Python数据存储 — MySQL数据库操作

    本地安装MySQL 调试环境python3.6,调试python操作mysql数据库,首先要在本地或服务器安装mysql数据库. 安装参考:https://mp.csdn.net/postedit/8 ...

  8. python 数据写入json文件时中文显示Unicode编码问题

    一.问题描述 import json dir = { '春晓':'asfffa', '春眠不觉晓' : '处处闻啼鸟', '夜来风雨声' : 56789, 'asdga':'asdasda' } fp ...

  9. js数据持久化本地数据存储-JSON.parse和JSON.stringify的区别

    JSON.stringify()的作用是将 JavaScript 值转换为 JSON 字符串, 而JSON.parse()可以将JSON字符串转为一个对象. 简单点说,它们的作用是相对的,我用JSON ...

随机推荐

  1. 转 shell中的多进程【并发】

    原文地址https://bbs.51cto.com/thread-1104907-1-1.html 根据我个人的理解, 所谓的多进程 只不过是将多个任务放到后台执行而已,很多人都用到过,所以现在讲的主 ...

  2. Linux常用命令type、date

    Linux命令类型: 内置命令(shell内置):cd is shell builtin 外部命令:命令 is /usr/bin/命令,在文件系统的某个路径下有一个与命令名称相应的可执行文件 type ...

  3. Java-收邮件

    import java.util.Properties; import javax.mail.Folder; import javax.mail.Message; import javax.mail. ...

  4. Navicat导出表结构

    SQL Server导出表结构 Oracle导出表结构

  5. codevs 1009 产生数 2002年NOIP全国联赛普及组 x (内附解析w)

                         题目描述 Description 给出一个整数 n(n<10^30) 和 k 个变换规则(k<=15). 规则: 一位数可变换成另一个一位数: 规 ...

  6. 推荐系统系列(二):FFM理论与实践

    背景 在CTR/CVR预估任务中,除了FM模型[2] 之外,后起之秀FFM(Field-aware Factorization Machine)模型同样表现亮眼.FFM可以看作是FM的升级版,Yuch ...

  7. 谷歌protocolbuff使用说明步骤

    Protocolbuff 目录 1       Protocolbuff定义和作用... 1 2       Protocolbuff的使用步骤... 1 3       .proto编写格式... ...

  8. 两次取反 !!a 的作用

    两次取反的作用 让a的结果只能是false或者是true:如果a是0:两次取反当然是false:如果a是null:两次取反是false:如果a是undefined:两次取法是false:其余的比如 a ...

  9. Leetcode题目31.下一个排列(中等)

    题目描述: 实现获取下一个排列的函数,算法需要将给定数字序列重新排列成字典序中下一个更大的排列. 如果不存在下一个更大的排列,则将数字重新排列成最小的排列(即升序排列). 必须原地修改,只允许使用额外 ...

  10. 2018-2019-2 20175215 实验三《敏捷开发与XP实践》实验报告

    一.实验内容与步骤 1.安装.使用alibaba 插件规范代码 在IDEA的setting中找到plugins并搜索alibaba,点击install进行安装 重启IDEA后,在代码中右击点击编码规约 ...