欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

Python爬虫爬取异步加载的数据

程序员文章站 2022-10-04 12:01:04
前言 本文的文字及图片来源于网络,仅供学习、交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理。作者:努力努力再努力 爬取qq音乐歌手数据接口数据 https://y.qq.com/portal/singer_list.html这是歌手列表的网址 分析网页 f12开发者选 ......

前言

爬取qq音乐歌手数据接口数据


这是歌手列表的网址

分析网页

  • f12开发者选项 找到network 里面有异步加载的数据,如果你对这个还不是很懂。可以先去小编的python交流.裙 :一久武其而而流一思(数字的谐音)转换下可以找到了,里面有最新python教程项目可拿,多跟里面的人交流,进步更快哦!
  • 刷新看找数据Python爬虫爬取异步加载的数据
    看他们的response

https://u.y.qq.com/cgi-bin/musicu.fcg?-=getucgi20652690515538596&g_tk=944669952&loginuin=1638786338&hostuin=0&format=json&incharset=utf8&outcharset=utf-8&notice=0&platform=yqq.json&neednewcode=0&data={"comm"%3a{"ct"%3a24%2c"cv"%3a0}%2c"singerlist"%3a{"module"%3a"music.singerlistserver"%2c"method"%3a"get_singer_list"%2c"param"%3a{"area"%3a-100%2c"sex"%3a-100%2c"genre"%3a-100%2c"index"%3a-100%2c"sin"%3a0%2c"cur_page"%3a1}}}
会有一个网址的response是歌手列表就是上述网址 记住这个网址然后就是请求这个网址

  • 先贴源码
import jsonpath
import json
import requests
import csv
import time
def writecsv(content):
	with open('spider2.csv','a+',encoding='utf-8',newline='') as filecsv:
		writer = csv.writer(filecsv)
		writer.writerow(content)
writecsv(['歌手名','歌手地区','歌手id','歌手图片'])
def gethtml(url):
	response=requests.get(url)
	response.encoding='utf-8'
	html=response.text
	html=json.loads(html)
	print(html)
	singname=jsonpath.jsonpath(html,'$..singerlist..singer_name')
	singcountry=jsonpath.jsonpath(html,'$..singerlist..country')
	singer_mid=jsonpath.jsonpath(html,'$..singerlist..singer_mid')
	singer_pic=jsonpath.jsonpath(html,'$..singerlist..singer_pic')
	print(singer_mid)
	for index,i in enumerate(singname):
		writecsv([i,singcountry[index],singer_mid[index],singer_pic[index]])
index=0
for i in range(0,801,80):
	index=index+1
	gethtml('https://u.y.qq.com/cgi-bin/musicu.fcg?-=getucgi01616088836276819&g_tk=5381&loginuin=0&hostuin=0&format=json&incharset=utf8&outcharset=utf-8&notice=0&platform=yqq.json&neednewcode=0&data={"comm":{"ct":24,"cv":0},"singerlist":{"module":"music.singerlistserver","method":"get_singer_list","param":{"area":-100,"sex":-100,"genre":-100,"index":-100,"sin":%(no)d,"cur_page":%(page)d}}}'% {'no':i,'page':index})
	time.sleep(3)
# index=0
# for i in range(0,801,80):
# 	index=index+1
# print(i)
# print(index)

这里用到json jsonpath最后都保存为csv格式文件方便实用,,如果你对这个还不熟,可以先去小编的python交流.裙 :一久武其而而流一思(数字的谐音)转换下可以找到了,里面有最新python教程项目可拿,多跟里面的人交流,进步更快哦!
html=json.loads(html)这里是将网页数据保存为json格式然后通过jsonpath解析json文件jsonpath语法类似xpath可以看下教程Python爬虫爬取异步加载的数据
使用jsonpath.jsonpath()解析json格式的数据$是根节点不能丢

singname=jsonpath.jsonpath(html,'$..singerlist..singer_name')

{
“singerlist”: {
“data”: {
“area”: -100,
“genre”: -100,
“index”: -100,
“sex”: -100,
“singerlist”: [
{
“country”: “内地”,
“singer_id”: 5062,
“singer_mid”: “002j4uuk29y8by”,
“singer_name”: “薛之谦”,
“singer_pic”: “http://y.gtimg.cn/music/photo_new/t001r150x150m000002j4uuk29y8by.webp
},
{
“country”: “内地”,
“singer_id”: 1199300,
“singer_mid”: “0013rspd3xs0fg”,
“singer_name”: “半阳”,
“singer_pic”: “http://y.gtimg.cn/music/photo_new/t001r150x150m0000013rspd3xs0fg.webp
},

这里…代表绝对哪里有就匹配到哪相当于xpath的//singlist下的singer_name很好找到可以先打印一下看错误再改依次将歌手名歌手国家等打印出来因为他们的个数都是相同的采用枚举的方式将每一个按行写入csv格式

with open('spider2.csv','a+',encoding='utf-8',newline='') as filecsv:第一个参数是文件名,第二个参数是追加读方式,第三个是编码方式避免乱码,第四个是控制空行删除空行,会自动生成这个csv文件成功后看有没有多出来的csv文件打开后
Python爬虫爬取异步加载的数据
这样一个简单的异步加载的数据的爬取就成功了