039 爬取json数据以HTML形式到本地

爬虫 Python 第二课 2019年5月14日

上节课内容

#037学习Python爬虫爬取博客园作业

本节课内容

爬取数据保存到本地

解析json数据

介绍HTML

json数据保存为HTML并加上超链接

爬取数据

直接使用上节课代码
把文件保存到以.html结尾的文件中

SRE实战 互联网时代守护先锋,助力企业售后服务体系运筹帷幄!一键直达领取阿里云限量特价优惠。
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')

039 爬取json数据以HTML形式到本地 随笔 第1张
保存文件

解析json数据

引入json库

import json

039 爬取json数据以HTML形式到本地 随笔 第2张 举一反三
为何想到引用json库?
1.首先 具有基本的背景知识,知道数据类型为json
2.结合 python 语言的特点 第三方库众多
3.在搜索引擎搜索 python json相关信息

039 爬取json数据以HTML形式到本地 随笔 第3张
python json相关信息
4.根据搜索引擎的返回结果即可确定存在json库可以使用

使用json.loads()解析字符串

l=json.loads(r.text)

使用json库中loads函数,将r.text字符串解析成dict字典格式,存储于l中

解析后字典的使用

l为字典型
039 爬取json数据以HTML形式到本地 随笔 第4张
遍历l的字典中的键值对
l 存在三种键值对,data,recordsTotal,recordsFiltered
从英文翻译中我们就能知道,数据在l[“data”]中

039 爬取json数据以HTML形式到本地 随笔 第5张
i存在三个键值对
所以我们遍历l[“data”]

发现我们每个l["data"]里面存储的是列表。

039 爬取json数据以HTML形式到本地 随笔 第6张
遍历l[“data”]

通过遍历输出列表里第一个字典元素,输出了所有key

039 爬取json数据以HTML形式到本地 随笔 第7张
列表遍历

根据英语翻译我们很容易就找到了数据内部的
链接 ,姓名,学号和上交时间分别为
i['Url'],i['RealName'],i['StudentNo'],i['DateAdded']

介绍HTML

HTML最最最基础

HTML 以'<html>'</html>'内部存放头<head>和<\head> 和身体<body><\body>

039 爬取json数据以HTML形式到本地 随笔 第8张
简单的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()
扫码关注我们
微信号:SRE实战
拒绝背锅 运筹帷幄