将爬取的数据存储为json文件

以盗墓笔记小说阅读网为例吧,获取章节的信息和链接,毕竟我高中时也是一颗稻米,看过第一本和第八本书,电视剧电影也都看过,很喜欢张起灵和吴邪

一开始我并不知道这个网站

将爬取的数据存储为json文件_第1张图片

这次我没用Python的urllib2库,学了requests库,就用了get函数,这个确实比之前的urllib/urllib2/cookielib库简洁方便。

我本以为这个网站get的时候顶多加个headers就行了,结果还真有点麻烦... 

第一次进入这个网站的时候,有个浏览器安全检查,停留5秒,所以一开始就卡在这了,直接进不去,更别说爬人家的东西了。。。

之后在进入这个网站就没有那个检查停留了,所以要加Cookies,我用的Firebug,Cookies还是很好找的,随便选了几条,但太少可能不行

然后是中文显示问题,用sys模块处理,再加上dump函数里的ensure_ascii的参数设置,json文件才得以显示出中文

#!/usr/bin/env python  
#-*-coding:utf-8-*-  
      
import requests, json
import sys
from bs4 import BeautifulSoup

#处理编码问题
reload(sys)  
sys.setdefaultencoding("utf-8")  

user_agent = 'Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:55.0) Gecko/20100101 Firefox/55.0' #用户代理
headers = {'User-Agent': user_agent}
cookies = {'__cfduid':'d56050ac3d7e8ae5a71a6c49829aefb281504577002', 'ASPSESSIONIDSQCSSQRA':'GDFBBGMCACLGNJMNJFODPPLL',
 'Hm_lpvt_0154745fe13860e5efacd87a86a7cdea':'1504587470', 'bdshare_firstime':'1504577006948',
 'cf_clearance':'2faf34a20a29d30d97d3fe3cc4594fdb207978da-1504577006-86400'} #网站在电脑上留下的Cookies
res = requests.get('http://seputu.com/', headers = headers, cookies = cookies)

soup = BeautifulSoup(res.text)
content = []
for mulu in soup.find_all(class_ = 'mulu'):
	h2 = mulu.find('h2')
	if h2:
		title = h2.string
		chapter = []
		for a in mulu.find_all('a'):
			href = a.get('href')
			name = a.get('title')
			chapter.append({'href': href, 'chapter': name})
		content.append({'book': title, 'content': chapter})
with open('daomubiji.json', 'wb') as fp:  #将所得的数据存储为json文件
	json.dump(content, fp = fp, ensure_ascii = False, indent = 4, sort_keys = True)
    #dump函数有很多参数,这里也用到了好几个,第一个是目标object,第二个是要写入的文件对象,第三个处理非ascii码的字符
    #第四个是缩进,格式化显示,最后一个是排序

保存后的json文件:
将爬取的数据存储为json文件_第2张图片

你可能感兴趣的:(Python)