飞道的博客

爬虫(106)pymongo 存储周杰伦歌曲信息

368人阅读  评论(0)

我们打开qq音乐的网址:https://y.qq.com/
然后输入 周杰伦, 点击搜索;
再打击歌词那一项,F12打开控制台,打开如下:

然后你就会发现, 这右边的MusicJsonCallback8040753716748157不就是我们需要的吗?

ok,直接复制黏贴进我们的代码。jsonpCallback: 

MusicJsonCallback8040753716748157,完美!
然后右键这一个文件, 选择 复制该网址, 把data里面的searchid 替换成网址上面的参数searchId,w 替换成你搜索的歌曲名;


最后一步, 看看你搜索的歌手有多少页, 周杰伦的是有20页, ok, 把mian函数改一下, 改成从1到20页的数据,全部爬下来;


   
  1. #!/usr/bin/python
  2. # -*- coding:utf -8 -*-
  3. import requests
  4. import json
  5. import pymongo
  6. import time
  7. def main(page):
  8. print(page)
  9. url = 'https://c.y.qq.com/soso/fcgi-bin/client_search_cp'
  10. #这里数据只有三个是需要变的,分别是:jsonpCallback,w, searchid
  11. data = { 'qqmusic_ver': 1298,
  12. 'remoteplace': 'txt.yqq.lyric',
  13. 'inCharset': 'utf8',
  14. 'sem': 1, 'ct': 24, 'catZhida': 1, 'p': page,
  15. 'needNewCode': 0, 'platform': 'yqq',
  16. 'lossless': 0, 'notice': 0, 'format': 'jsonp', 'outCharset': 'utf-8', 'loginUin': 0,
  17. 'jsonpCallback': 'MusicJsonCallback19507963135827455',
  18. 'searchid': '98485846416392878',
  19. 'hostUin': 0, 'n': 10, 'g_tk': 5381, 't': 7,
  20. 'w': '周杰伦', 'aggr': 0
  21. }
  22. headers = { 'content-type': 'application/json',
  23. 'User-Agent': 'Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:22.0) Gecko/20100101 Firefox/22.0'}
  24. r = requests.get(url, params = data, headers = headers)
  25. time.sleep( 3)
  26. #截取 第 35个字符到最后一个
  27. text = r.text[ 35: -1]
  28. # print(text)
  29. result = json.loads(text)
  30. if result[ 'code'] == 0:
  31. for list in result[ 'data'][ 'lyric'][ 'list']:
  32. item = {
  33. 'albumname': list[ 'albumname'],
  34. 'content': list[ 'content']
  35. }
  36. mongoInsert(item)
  37. # print (list)
  38. # print(item)
  39. def mongoInsert(item):
  40. #进入数据库存储
  41. client = pymongo.MongoClient(host= 'localhost',port= 27017)
  42. db = client.qqmusic
  43. # item为指定集合名
  44. collection = db.JayZhou
  45. res = collection.insert(item)
  46. print(res)
  47. print( '插入成功')
  48. if __name__ == '__main__':
  49. #页数最多为 20 ,根据歌手的歌曲多少决定
  50. for i in range( 1, 20):
  51. main(i)


转载:https://blog.csdn.net/qq_36772866/article/details/105631466
查看评论
* 以上用户言论只代表其个人观点,不代表本网站的观点或立场