前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >快速入门网络爬虫系列 Chapter09 | JSON数据处理

快速入门网络爬虫系列 Chapter09 | JSON数据处理

作者头像
不温卜火
发布2020-10-28 14:54:53
9590
发布2020-10-28 14:54:53
举报
文章被收录于专栏:不温卜火不温卜火

一、JSON

JSON是指JavaScript对象表示法(JavaScript Object Notation):

  • 独立于语言和平台
  • 与XML类似,存储和交换文本信息
  • 与XML语言更快、更易解析

JSON的主要表达形式:

  • 单个JSON对象,书写格式为{string:value,string:value}
1
1

1、获取JSON响应

通过网络库requests,网络爬虫获取响应,并使用JSON格式展示数据

import requests
import urllib

url = 'http://httpbin.org/get'
response = requests.get(url,timeout = 5)
print(response.text)
2
2

2、解析JSON

2.1、解码JSON的功能

Python的json库可以提供编码,解码JSON的功能 json库的主要函数有:

  • json.loads():JSON字符串转换成Python
  • json.load():文件中JSON字符串转换为Python
  • json.dumps():Python对象序列化为JSON对象
  • json.dump():Python对象序列化为JSON对象,并写入文件

把网络爬虫获取的响应转换成Python对象:

import json
json_data = json.loads(response.text)
print(type(json_data))
print(json_data)
3
3
import requests
from bs4 import BeautifulSoup as bs
s=requests.session()
s.headers = {'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:73.0) Gecko/20100101 Firefox/73.0'}
page=s.get('https://api.github.com/events')
data = page.json()
print(type(data))
print(type(data[0]))
print(data[0])
4
4
5
5

2.2、从dict中还原为JSON对象

Json库还可以从dict中还原为JSON对象,在Python中为字符串类型

back_json = json.dumps(json_data)
print(type(back_json))
print(back_json)
6
6

二、API

应用编程接口(Application Programming Interface,API)

  • API不同的应用提供方便友好的接口
  • 开发者用不同的语言结构编写程序,通过API获取数据,实现不同程序间的信息共享

API在网络爬虫中的使用场景:

7
7

API并不随处可见,但可以请求接收请求,并向客户端返回响应的信息 与网站不同的是,API必须:

  • 拥有严谨的语言规则,标准的规范来产生数据
  • 使用XML或者JSON格式来展示数据,而不是HTML表示

下面以新浪微博为例:

8
8

由上图我们可以看到数据,但是这些数据不是我们想要看到的,这是因为我们并没有转码。 下面我们通过两种方式打开来验证下内容:

1、第一种

直接点击get

9
9

结果如下:

10
10

2、第二种

复制Request URL的链接打开

11
11

结果如下:

12
12

经过对比,我们发现结果是一样的。

3、代码实现

下面在代码实现下:

import requests
from bs4 import BeautifulSoup as bs
s=requests.session()
s.headers = {'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:73.0) Gecko/20100101 Firefox/73.0'}
page=s.get('https://feed.sina.com.cn/api/roll/get?pageid=121&lid=1356&num=20&versionNumber=1.2.4&page=2&encode=utf-8&callback=feedCardJsonpCallback&_=1585719783848')
print(page.content)
13
13

上述代码遍获取到了所需要解析的文件,下面就需要进行解析了:

import requests
import json
from bs4 import BeautifulSoup as bs
s=requests.session()
s.headers = {'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:73.0) Gecko/20100101 Firefox/73.0'}
page=s.get('https://feed.sina.com.cn/api/roll/get?pageid=121&lid=1356&num=20&versionNumber=1.2.4&page=2&encode=utf-8')
print((json.loads(page.content.decode("utf-8"))))
14
14

这样就转换成dict类型的数据,供我们提取

15
15

4、测试

取出网址:

import requests
import json
from bs4 import BeautifulSoup as bs
s=requests.session()
s.headers = {'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:73.0) Gecko/20100101 Firefox/73.0'}
page=s.get('https://feed.sina.com.cn/api/roll/get?pageid=121&lid=1356&num=20&versionNumber=1.2.4&page=2&encode=utf-8')
news = json.loads(page.content.decode("utf-8")).get('result').get("data")
for new in news:
    print(new.get("url"))
16
16
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2020-04-06 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、JSON
    • 1、获取JSON响应
      • 2、解析JSON
        • 2.1、解码JSON的功能
        • 2.2、从dict中还原为JSON对象
    • 二、API
      • 1、第一种
        • 2、第二种
          • 3、代码实现
            • 4、测试
            领券
            问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档