爬取QQ音乐的评论
爬取QQ音乐的评论
@TOC
前言
本文分享一个分享一个爬取音乐的评论的案例,来讲解下JSO的使用。
导航
- 爬取小说案例-BeautifulSoup教学篇
- 爬取二手房案例--parsel教学篇(CSS选择器)
- 爬取美国公司案例-parsel库教学篇(Xpath的详细使用)
- 爬取东方财富网-parsel教学篇(正则表达式的详细使用+实例)
- 爬取QQ音乐的评论-JSO库的详细使用
JSO 是一种轻量级的数据交换格式,易于人阅读和编写,同时也易于机器解析和生成。python 的 json库提供了一套强大的工具来处理 JSO 数据,包括编码(序列化)和解码(反序列化)功能,以及从文件和字符串中读取和写入 JSO 数据的能力。Python 的 json 库可以在 Python 对象(如字典和列表)和 JSO 格式的字符串之间进行转换。
我们在爬取数据的时候,很多时候数据并不在源码当中,很多都是通过js中的fetch 和 XMLHttpRequest (XHR) 发起 HTTP 请求的 API来进行异步加载数据,他们大部分都是JSO格式的数据。下面这个图是某某音乐的某首歌曲的评论异步加载的JSO数据,我们获取特定的数据需要从中提取。
在这里先讲一下python的序列化和反序列化
序列化:将 python 对象转换为字符串或其他格式(如字节流),以便可以存储到文件中或通过网络传输。在 python 中,json.dumps() 函数用于将 python 对象序列化为 json字符串。
反序列化:反序列化是将序列化的数据(如 json 字符串)转换回 python 对象的过程。在 python 中,json.loads() 函数用于将 json 字符串反序列化为 python 对象。
常见函数 | 解释 |
---|---|
json.dumps() | 将 python 对象(如字典、列表、字符串、数字、布尔值等)序列化为 JSO 格式的字符串 |
json.loads() | 将 JSO 格式的字符串反序列化为 python 对象(如字典或列表)。 |
json.load() | 从文件中读取 JSO 数据并反序列化为 python 对象 |
json.dump() | 将 python 对象序列化为 JSO 数据并写入文件。 |
下面是这些函数的应用
代码语言:python代码运行次数:0运行复制import json
import re
# json.dumps()的应用:pyton对象序列化为json字符串
data = {
"name":"zhangsan",
"age":18,
"address":"Beijing",
"phrase":"Just do it"
}
print(type(data))
# 获取对象(字典)中值的一种方法是通过get方法获取,另外一种是通过键来获取。
print(f"{data['phrase']} {data.get('phrase')}")
data=json.dumps(data)
print(type(data))
print(data)
"""
输出:
<class 'dict'>
Just do it Just do it
<class 'str'>
{"name": "zhangsan", "age": 18, "address": "Beijing", "phrase": "Just do it"}
"""
# json.loads()函数的使用:json字符串反序列化为python对象
data = '{"name":"zhangsan","age":18,"address":"Beijing","phrase":"Just do it"}'
res=json.loads(data)
print(res)
# 输出:{'name': 'zhangsan', 'age': 18, 'address': 'Beijing', 'phrase': 'Just do it'}
# json.load()函数的使用:从文件中读取json数据并将反序列化为Python对象
with open("data.json","r") as f:
data=json.load(f)
# json.dump()函数的使用:将Python对象序列化为json格式的字符串,并写入到文件对象中
data = {"name":"zhangsan","age":18,"address":"Beijing","phrase":"Just do it"}
with open("data.json","w") as f:
json.dump(data,f)
案例源码
代码语言:python代码运行次数:0运行复制import requests # 数据请求库
import json # JSO库
import pprint
url='.fcg'
# 请求头
headers={
'User-agent': 'Mozilla/5.0 (Windows T 10.0; Win64; x64) AppleWebKit/57.6 (KHTML, like Gecko) Chrome/11.0.0.0 Safari/57.6 Edg/11.0.0.0',
}
# 会话标识Cookie
cookies={"cookie":"_qpsvr_localtk=0.1579467088812902; RK=qKe9i7H7e; ptcz=62b7cb44649eb786afa19fe2dbd58ffebc6d18212be04ca92d42aedcf4f; ETCI=e56cb4650ac64108a87e4acf16bd107; msecToken=f8c4227bc8bf051fd77b86d675b22b; _qimei_uuid42=1891d002e191006649ccaf1f51ae117bd778fd9ca1; pac_uid=0_A6DSZRJ1GQRSs; _qimei_fingerprint=95f268e6c4f46e8ca4e527b7df81c9; _qimei_q6=; _qimei_h8=2db8667f49ccaf1f51ae117b0200000271891d; suid=user_0_A6DSZRJ1GQRSs; skey=null; luin=null; lskey=null; user_id=null; session_id=null; p_info=ssid=s97092272; p_pvid=211414884; fqm_pvqid=8b564295-aa67-4148-ac49-27dabde0220; fqm_sessionid=f012c20-b9d7-41a6-bf2-c9866f1bcfcf; ts_uid=206722; _clck=9750772|1|fr6|0; ts_refer=www.bing/; login_type=1; psrf_qqunionid=6D68B17B8E59C6854980F84F6FBB9B; psrf_qqrefresh_token=222BC08F17A92AE47A2A4DB2EBA2295; qm_keyst=Q_H_L_6kIfTelRU-jv6SQ-2w8z2YLzpXAqL8kVo4sHWffJcM0dTiHInj9Ayf2VyliX86VTwPCpctW8w_Sx4LddqTRLys; euin=owCFoeci7Ko5oc**; psrf_access_token_expiresAt=17581421; psrf_musickey_createtime=172976621; psrf_qqopenid=15C6B475DABC764F28A2786012E792EC; tmeLoginType=2; uin=26808512; psrf_qqaccess_token=FB4CBBA95DD850647EAFFF49A5D9E; music_ignore_pskey=2020627146Hn@vBj; wxopenid=; wxunionid=; qqmusic_key=Q_H_L_6kIfTelRU-jv6SQ-2w8z2YLzpXAqL8kVo4sHWffJcM0dTiHInj9Ayf2VyliX86VTwPCpctW8w_Sx4LddqTRLys; wxrefresh_token=; ts_last=y.qq/n/ryqq/songDetail/00XT6Ef4H6X66"
}
# 查询参数
params = {
'_': '172976668667',
'sign': 'zzc447e749fbpp4okgcbp7tfuewc4xbqkoy7d94955c',
}
# 请求体:这里的data数据包含了个人信息,各位使用自己的data
data = '{"xxxxx“}'
respe=requests.post(url=url,headers=headers,params=params,data=data,cookies=cookies)
# 这里获取的是json数据,需要反序列化为python对象,也可直接使用respe.json()来获取
res=
res=json.loads(res)
# res=respe.json()
# 可以利用pprint库来打印格式化后的的数据,便于观察
pprint.pprint(res)
# 观察数据格式
for req in res.get("req_4").get('data').get('CommentList').get('Comments'):
print(f"网名:{req.get('ick')} 评论:{req.get('Content')} 地址:{req.get('Location')} 头像地址:{req.get('Avatar')} ")
使用pprint库打印后的数据如下
运行截图
共勉
知不足而奋进,望远山而前行
博客
- 本人是一个渗透爱好者,不时会在(laity的渗透测试之路)更新一些实战渗透的实战案例,感兴趣的同学可以关注一下,大家一起进步。
- 之前在发布了一个kaliWiFi的文章,感兴趣的同学可以去看一下,在b站(up主:laity1717)也发布了相应的教学视频。
#感谢您对电脑配置推荐网 - 最新i3 i5 i7组装电脑配置单推荐报价格的认可,转载请说明来源于"电脑配置推荐网 - 最新i3 i5 i7组装电脑配置单推荐报价格
推荐阅读
留言与评论(共有 5 条评论) |
本站网友 我要创业 | 16分钟前 发表 |
python 的 json库提供了一套强大的工具来处理 JSO 数据 | |
本站网友 恒盈名居 | 19分钟前 发表 |
以便可以存储到文件中或通过网络传输 | |
本站网友 腾讯手机管家pro | 3分钟前 发表 |
"Just do it"} with open("data.json" | |
本站网友 夫妻性生活技巧 | 25分钟前 发表 |
以便可以存储到文件中或通过网络传输 |