039 爬取json数据以HTML形式到本地
上节课内容
本节课内容
爬取数据保存到本地
解析json数据
介绍HTML
json数据保存为HTML并加上超链接
爬取数据
直接使用上节课代码
把文件保存到以.html结尾的文件中
import requests
url = 'https://edu.cnblogs.com/Homework/GetAnswers?homeworkId=3103&_=1557235742010'
try:
r = requests.get(url,timeout=20)
r.raise_for_status()
r.encoding = r.apparent_encoding
except:
print('网络异常或页面未找到,请重试')
f=open('homework.html','w')

保存文件
解析json数据
引入json库
import json
举一反三
为何想到引用json库?
1.首先 具有基本的背景知识,知道数据类型为json
2.结合 python 语言的特点 第三方库众多
3.在搜索引擎搜索 python json相关信息

python json相关信息
4.根据搜索引擎的返回结果即可确定存在json库可以使用
使用json.loads()解析字符串
l=json.loads(r.text)
使用json库中loads函数,将r.text字符串解析成dict字典格式,存储于l中
解析后字典的使用
l为字典型
遍历l的字典中的键值对
l 存在三种键值对,data,recordsTotal,recordsFiltered
从英文翻译中我们就能知道,数据在l[“data”]中

i存在三个键值对
所以我们遍历l[“data”]
发现我们每个l["data"]里面存储的是列表。
![遍历l[“data”] 遍历l[“data”]](./images/1557901887008.png)
遍历l[“data”]
通过遍历输出列表里第一个字典元素,输出了所有key

列表遍历
根据英语翻译我们很容易就找到了数据内部的
链接 ,姓名,学号和上交时间分别为
i['Url'],i['RealName'],i['StudentNo'],i['DateAdded']
介绍HTML
HTML最最最基础
HTML 以'<html>'</html>'内部存放头<head>和<head> 和身体<body><ody>

简单的HTML结构
我们把数据存储在body里面就可以了
存储在<p><p>段落标签里
超链接使用
<a href="{网页链接}"target="_blank" >连接 </a>
存储思路
使用字符串headers存储
header='''
<html>
<head>
<title>爬虫作业</title></head>
<body>
'''
字符串footer存储
footer='''
</body>
</html>
'''
数据内容存储到body内
body=body+("<p><a href="{}"target="_blank" >连接 </a>姓名 {}学号{} 时间{}</p>".format(i['Url'],i['RealName'],i['StudentNo'],i['DateAdded']))
最后将字符串header+body+footer存储到.html文件内
json数据保存为HTML并加上超链接
import requests
import json
url = 'https://edu.cnblogs.com/Homework/GetAnswers?homeworkId=3103&_=1557235742010'
try:
r = requests.get(url,timeout=20)
r.raise_for_status()
r.encoding = r.apparent_encoding
except:
print('网络异常或页面未找到,请重试')
f=open('homework.html','w')
l=json.loads(r.text)
header='''
<html>
<head>
<title>爬虫作业</title></head>
<body>
'''
footer='''
</body>
</html>
'''
body=''
for i in l["data"]:
body=body+("<p><a href="{}"target="_blank" >连接 </a>姓名 {}学号{} 时间{}</p>".format(i['Url'],i['RealName'],i['StudentNo'],i['DateAdded']))
print ("<p>连接 {}姓名 {}学号{} 时间{}</p>".format(i['Url'],i['RealName'],i['StudentNo'],i['DateAdded']))
s=header+body+footer
f.write(s)
f.close()