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. Python assert statement

    Python assert statement 关于assert想找到文档中的例子:但是搜索python文档没找到. 看到这篇文章:对初学者很有帮助:https://www.programiz.com ...

  2. UVa540 Team Queue(队列queue)

    队列 STL队列定义在头文件<queue>中, 用“ queue<int>s ” 方式定义, 用push()和pop()进行元素的入队和出队操作, front()取队首元素(但 ...

  3. CentOS7 安装 RocketMQ 实践和小示例

    CentOS7 安装 RocketMQ 实践和小示例 1.通过 SSH 工具(比如 XShell)连接到 CentOS7 服务器上: 2.进入到 /usr/local 目录中: cd /usr/loc ...

  4. lVS/haproxy

    haproxy 安装配置   1. 下载及安装 wget http://haproxy.1wt.eu/download/1.4/src/haproxy-1.4.21.tar.gz tar zxvf h ...

  5. PHP Swoole websocket协议实现

  6. Acwing-203-同余方程(扩展欧几里得)

    链接: https://www.acwing.com/problem/content/205/ 题意: 求关于x的同余方程 ax ≡ 1(mod b) 的最小正整数解. 思路: 首先:扩展欧几里得推导 ...

  7. Redis——解决“org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'redisReferenceResolver': Unsatisfied dependency expressed through constructor parameter 0”

    错误栈: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name ...

  8. kubernetes的搭建以及dashboard页面的启动

    ###查看kubernetes状态 ``` kubectl get pods -A #查看相关状态 kubectl get cs #查看k8s的ready状态 kubectl get node #查看 ...

  9. C#与数据库有关的控件和属性

    BindingNavigator  数据记录导航 BindingSource 与数据源绑定, 常用属性:DataSource.DataMember 常用方法: DataGridView 以表格形式显示 ...

  10. swagger2 常用注解说明

    常用到的注解有: Api ApiModel ApiModelProperty ApiOperation ApiParam ApiResponse ApiResponses ResponseHeader ...