数据存储(无数据库版)之一:存储为JSON

本文介绍了如何使用Python的Requests库获取网页HTML内容,BeautifulSoup解析网页结构,提取标题和章节信息。然后讲解了Python的JSON模块,包括如何编码Python对象为JSON字符串,以及如何将JSON数据写入文件。最后,文章展示了如何将爬取的标题和章节信息存储为JSON格式,并写入文件。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

#coding:utf8

#使用Requests访问http://seputu.com/,获取并打印HTML文档内容
import requests
user_agent = 'Mozilla/4.0 (compatible; MSIE 5.5; Windows NT)'
headers = {'User-Agent':user_agent}
r = requests.get('http://seputu.com/', headers=headers)
print r.text

#分析网页的HTML结构:
#标题和章节都被包含在<div class="mulu">标记下,标记位于其中的<div class="mulu-title">下的<h2>中,
#章节位于其中的<div class="box">下的<a>中
from bs4 import BeautifulSoup
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


#此时已经成功获取标题,章节;接下介绍python操作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, cls=None, indent=None, separators=None,
#      encoding='utf-8', default=None, sort_key=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_key=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:分隔符,实际上是(item_separator,dict_separator)的一个元祖,默认的就是(',',':'),这表示
#          dictionary内keys之间用","隔开,key和value之间用":"隔开;
#encoding:默认是UTF-8。设置JSON数据的编码方式;
#sort_keys:将数据根据keys的值进行排序;
import json
str = [{"username":"七夜","age":24},(2,3),1]
json_str = json.dumps(str,ensure_ascii=False)
print json_str
with open('qiye.text','w') as fp: #写入文件
    json.dump(str,fp=fp,ensure_ascii=False)

#解码:
#把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:如果指定,将把每一个JOSN字符串按照float解码调用。
#            默认情况下,相当于float(num_str)
#parse_int:如果指定,将把每一个JOSN字符串按照int解码调用。
#            默认情况下,相当于int(num_str)
new_str = json.loads(json_str)
print new_str
with open('qiye.txt','r') as fp:
    print json.load(fp)

#以上为讲解python操作JSON;
#接下来接着例子把提取到的标题,章节和链接进行JSON存储:
import json
from bs4 import BeautifulSoup
import requests
user_agent = 'Mozilla/4.0 (compatible; MSIE 5.5; Windows NT)'
headers={'User-Agent':user_agent}
r = requests.get('http://seputu.com/',headers=headers)
soup = BeautifulSoup(r.text,'html.parser',from_encoding='utf-8')
content=[]
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')
            list.append({'href':href,'box_title':box_title})
    with open('qiye.json','wb') as fp:
        json.dump(content,fp=fp,indent=4)












评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值