Python—爬虫之Network,XHR,json & 带参数请求数据(爬取歌单、歌词)
Network是什么,能做什么
网页中F12打开网页源代码,就可以看到Network。
Network的功能是:记录在当前页面上发生的所有请求。
为什么我们需要从Network中获取信息,因为只有比较老(或比较轻量)的网站,我们用requests和BeautifulSoup就能解决它们,而对于比较复杂的网站,关键信息都是在实时网页的请求中,我们需要找到被隐藏的数据请求,才能继续进行下一步。
XHR要如何请求
完整表述是:XHR and Fetch
不知道大家有没有仔细观察过,浏览器上方,它所访问的网址没变,但是网页里却新加了内容
典型代表:如购物网站,下滑自动加载出更多商品。在线翻译网站,输入中文实时变英文
这个,叫做Ajax技术,应用这种技术,更新网页内容,不用重新加载整个网页,又省流量又省时间
json格式的转换
json则是另一种组织数据的格式,和html一样,常用来做网络数据传输。
json和XHR之间的关系:XHR用于传输数据,它能传输很多种数据,json是被传输的一种数据格式。
import json # 引入json模块
a = [1,2,3,4] # 创建一个列表a。
b = json.dumps(a) # 使用dumps()函数,将列表a转换为json格式的字符串,赋值给b。
print(type(b)) # 打印b的数据类型,结果为字符串
c = json.loads(b) # 使用loads()函数,将json格式的字符串b转为列表,赋值给c。
print(type(c)) # 打印c的数据类型,又转回列表了
小面展示一个实际案例应用,爬取一下你喜欢的“动次打次”的列表,并用json来解析数据。
import requests # 引用requests库
for i in range(60):
res_music = requests.get('https://c.y.qq.com/soso/fcgi-bin/client_search_cp?ct=24&qqmusic_ver=1298&new_json=1&remoteplace=txt.yqq.song&searchid=61322692688223569&t=0&aggr=1&cr=1&catZhida=1&lossless=0&flag_qc=0&p={}&n=10&w=%E6%9D%8E%E5%AE%87%E6%98%A5&g_tk=5381&loginUin=0&hostUin=0&format=json&inCharset=utf8&outCharset=utf-8¬ice=0&platform=yqq.json&needNewCode=0'.format(i))
json_music = res_music.