有一些网页会直接把所有的关键信息都放在HTML中请求,尤其是一些比较老(或比较轻量)的网站,我们用requests和BeautifulSoup就能解决它们;比如豆瓣。
而有些数据请求则通过Fetch/XHR传送,这些数据并不能直接在HTML页面中获取到,那么我们就需要用到Network功能:
1、Network功能简介
![](https://img-blog.csdnimg.cn/8bb0b1ee83694baeb197bf0a2ab8453e.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5LiA57KS5b6u5bCYXzE=,size_20,color_FFFFFF,t_70,g_se,x_16)
![](https://img-blog.csdnimg.cn/a04ca2949a5043d9a609e8117248b28d.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5LiA57KS5b6u5bCYXzE=,size_20,color_FFFFFF,t_70,g_se,x_16)
对请求进行分类,我们最常用的有以下:
![](https://img-blog.csdnimg.cn/bf842514479241dd8d53c02ed81ac5e8.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5LiA57KS5b6u5bCYXzE=,size_20,color_FFFFFF,t_70,g_se,x_16)
夹在第2行和第1行中间的,是一个时间轴。记录什么时间,有哪些请求。
2、什么是Fetch/XHR?
在Network中有一类非常重要的请求叫做Fetch/XHR。
我们平时使用浏览器上网的时候,经常有这样的情况:浏览器上方,它所访问的网址没变,但是网页里却新加了内容。这个,叫做Ajax技术(应用这种技术,好处是显而易见的——更新网页内容,而不用重新加载整个网页,又省流量又省时间的)。
这种技术在工作的时候,会创建一个XHR(或是Fetch)对象,然后利用XHR对象来实现,服务器和浏览器之间传输数据。在这里,XHR和Fetch并没有本质区别,只是Fetch出现得比XHR更晚一些,但作用都是一样的。主要结构如下:
在General中有Request URL,使用该URL即可获取到通过Fetch/XHR发送的请求内容,但是获取到的内容是Str类型的字典/列表。
![](https://img-blog.csdnimg.cn/e9c454b8e1c74800b38a78c0b44d5954.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5LiA57KS5b6u5bCYXzE=,size_20,color_FFFFFF,t_70,g_se,x_16)
3、什么是json()
json是另一种组织数据的格式,长得和Python中的列表/字典非常相像。它和html一样,常用来做网络数据传输。刚刚我们在XHR里查看到的列表/字典,严格来说其实它不是列表/字典,它是json。
简单来说,在Python语言当中,json是一种特殊的字符串,这种字符串特殊在它的写法——它是用列表/字典的语法写成的。
或许你会有疑问:那直接写成列表/字典不就好了,为什么要把它表示成字符串?答案很简单,因为不是所有的编程语言都能读懂Python里的数据类型(如,列表/字符串),但是所有的编程语言,都支持文本(比如在Python中,用字符串这种数据类型来表示文本)这种最朴素的数据类型。
如此,json数据才能实现,跨平台,跨语言工作。
而json和XHR之间的关系:XHR用于传输数据,它能传输很多种数据,json是被传输的一种数据格式。就是这样而已。
4、如何解析json数据
我们可以将json格式的数据,转换成正常的列表/字典,也可以将列表/字典,转换成json。
①json格式转换成列表/字典
import requests
res = requests.get('http://……')
print(res.json())
②将列表/字典转换成json格式
import requests
a = {'姓名': '张三', '性别': '男'}
print(json.dumps(a))
print(type(a))
5、案例
import requests
# Fetch/XHR对象headers-General-Request URL
url = 'https://c.y.qq.com/splcloud/fcgi-bin/smartbox_new.fcg?_=1646270844314&cv=4747474&ct=24&format=json&inCharset=utf-8&outCharset=utf-8¬ice=0&platform=yqq.json&needNewCode=1&uin=1152921504801487135&g_tk_new_20200303=2006272574&g_tk=2006272574&hostUin=0&is_xml=0&key=毛不易'
# 头信息
header = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.93 Safari/537.36'}
# 获取数据
res = requests.get(url, headers=header)
# 将json格式数据转换为字典/列表
res = res.json()
#从字典/列表中找到对应需要的数据
list_song = res['data']['song']['itemlist']
for song in list_song:
print(song['name'])