尚义县人民政府网,河北电视台民生关注,杂志版式设计
这是歌手列表的网址
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¬ice=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”: “”
},
{
“country”: “内地”,
“singer_id”: 1199300,
“singer_mid”: “0013rspd3xs0fg”,
“singer_name”: “半阳”,
“singer_pic”: “”
},
这里…代表绝对哪里有就匹配到哪相当于xpath的//singlist下的singer_name很好找到可以先打印一下看错误再改依次将歌手名歌手国家等打印出来因为他们的个数都是相同的采用枚举的方式将每一个按行写入csv格式
with open('spider2.csv','a+',encoding='utf-8',newline='') as filecsv:
第一个参数是文件名,第二个参数是追加读方式,第三个是编码方式避免乱码,第四个是控制空行删除空行,会自动生成这个csv文件成功后看有没有多出来的csv文件打开后
这样一个简单的异步加载的数据的爬取就成功了
如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复
新手学习Python2和Python3中print不同的用法
Python基于os.environ从windows获取环境变量
网友评论