前言

本文的文字及图片来源于网络,仅供学习、交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理。
作者:努力努力再努力

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

https://y.qq.com/portal/singer_list.html
这是歌手列表的网址

分析网页

  • f12开发者选项 找到network 里面有异步加载的数据,如果你对这个还不是很懂。可以先去小编的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可以看下教程
使用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爬虫爬取异步加载的数据的更多相关文章

  1. Python 爬取异步加载的数据

    在我们的工作中,可能会遇到这样的情况:我们需要爬取的数据是通过ajax异步加载的,这样的话通过requests得到的只是一个静态页面,而我们需要的是ajax动态加载的数据! 那我们应该怎么办呢??? ...

  2. Python+Selenium爬取动态加载页面(1)

    注: 最近有一小任务,需要收集水质和水雨信息,找了两个网站:国家地表水水质自动监测实时数据发布系统和全国水雨情网.由于这两个网站的数据都是动态加载出来的,所以我用了Selenium来完成我的数据获取. ...

  3. Python+Selenium爬取动态加载页面(2)

    注: 上一篇<Python+Selenium爬取动态加载页面(1)>讲了基本地如何获取动态页面的数据,这里再讲一个稍微复杂一点的数据获取全国水雨情网.数据的获取过程跟人手动获取过程类似,所 ...

  4. Python 爬虫练习项目——异步加载爬取

    项目代码 from bs4 import BeautifulSoup import requests url_prefix = 'https://knewone.com/discover?page=' ...

  5. Python爬虫之JS异步加载

    一.判断异步加载方式(常用的JS库) 1. jQuery(70%) # 搜索 jquery 茅塞顿开 <script src="http://ajax.googleapis.com/a ...

  6. python爬虫爬取get请求的页面数据代码样例

    废话不多说,上代码 #!/usr/bin/env python # -*- coding:utf-8 -*- # 导包 import urllib.request import urllib.pars ...

  7. Jsoup配合 htmlunit 爬取异步加载的网页

    加入 jsoup 和 htmlunit 的依赖 <dependency> <groupId>org.jsoup</groupId> <artifactId&g ...

  8. 使用Python爬虫爬取网络美女图片

    代码地址如下:http://www.demodashi.com/demo/13500.html 准备工作 安装python3.6 略 安装requests库(用于请求静态页面) pip install ...

  9. python爬虫—爬取英文名以及正则表达式的介绍

    python爬虫—爬取英文名以及正则表达式的介绍 爬取英文名: 一.  爬虫模块详细设计 (1)整体思路 对于本次爬取英文名数据的爬虫实现,我的思路是先将A-Z所有英文名的连接爬取出来,保存在一个cs ...

随机推荐

  1. thinkphp volist标签中加if判断的写法

    <if condition="$vo['devstatus'] eq 1">在线<else /> 离线</if> IF标签用法 <if c ...

  2. pandas的使用(3)

    pandas的使用(3)

  3. suseoj 1207: 大整数的乘法(java, 大数相乘, C/C++, 大数相乘)

    1207: 大整数的乘法 时间限制: 1 Sec  内存限制: 128 MB提交: 7  解决: 2[提交][状态][讨论版][命题人:liyuansong] 题目描述 求两个不超过200位的非负整数 ...

  4. nyoj 58-最少步数 (BFS)

    58-最少步数 内存限制:64MB 时间限制:3000ms Special Judge: No accepted:17 submit:22 题目描述: 这有一个迷宫,有0~8行和0~8列: 1,1,1 ...

  5. 领扣(LeetCode)删除链表的倒数第N个节点 个人题解

    给定一个链表,删除链表的倒数第 n 个节点,并且返回链表的头结点. 示例: 给定一个链表: 1->2->3->4->5, 和 n = 2. 当删除了倒数第二个节点后,链表变为 ...

  6. django_5:表单1

    CSRF( Cross Site Request Forgery)跨站点请求欺骗 方法一. {% csrf_token %} 方法二.在setting.py中注释掉MIDDLEWARE中的'djang ...

  7. Running serveral https server on a single IP address

    Nginx 在一个IP上配置多个https server时,默认只会发送默认server name的证书.这是由ssl 协议本身行为导致的:先建立ssl connection,后发送http请求.即n ...

  8. PHP中16个高危函数

    php中内置了许许多多的函数,在它们的帮助下可以使我们更加快速的进行开发和维护,但是这个函数中依然有许多的函数伴有高风险的,比如说一下的16个函数不到万不得已不尽量不要使用,因为许多“高手”可以通过这 ...

  9. 研究Java语言的编译器和虚拟机源代码

    现在使用Java语言的人很多,但是了解Java语言实现的人非常少.如果要研究Java语言的实现,推荐研究Javac和虚拟机HotSpot的源代码实现,其中Javac相当于Java编译的前端,HotSp ...

  10. SpringBoot系列之集成Thymeleaf用法手册

    目录 1.模板引擎 2.Thymeleaf简介 2.1).Thymeleaf定义 2.2).适用模板 3.重要知识点 3.1).th:text和th:utext 3.2).标准表达式 3.3).Thy ...