鱼C论坛

 找回密码
 立即注册
查看: 1230|回复: 4

[已解决]翻页爬取网易云最新评论

[复制链接]
发表于 2020-9-2 17:30:14 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 小小鹏 于 2020-9-2 17:32 编辑
  1. import requests
  2. import json
  3. import bs4
  4. import re
  5.          
  6. def get_comments(url):
  7.     headers = {
  8.         'user-agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/57.0.2987.98 Safari/537.36',
  9.         'referer': 'http://music.163.com/'
  10.         }
  11.     params = "AUC/rfnG4oOUAf0ug1rfO7V34dxLIaUuQ+19BGlGvSwcoIO/2k65YhyQJayprwPFeJx2iGjBHVB527JFlzQ6R6hy2GMNqqd214vFrLXZo8YYfYdcbm4+e/M+XoGKAU/KEgjhwue0IVf7dvcNPcEezDuvNs8632tNbLIdM33TFdcTtlrTM+waZ/jI0609s+ilDrkmnrMhtf7x2sUx3TuHurbPfTkbkzwVWo0mJDKexCvWrA1Znl7FZ7D0mNWB6yi6WJPpkYAthWj9IYgizpGlTcLG8IEbxW6Bahe2B10AIY0="
  12.     encSecKey = "2e8f3c153486e277b289fabe631805f60960e851317fa7559aa0a1db756b8ac018c67cd94370deec8e7b4923093126d1f9caa6fce1aac2d49656b856830bcaafebd6684bd2ace730378fe71ba4ad0283faf89e73284aaf36130531b58972f0d5ed584c58c98d71df9c2247e3510b7db23335e87154d620d981cc8e8d8636ccc5"   
  13.     data = {
  14.         "params": params,
  15.         "encSecKey": encSecKey
  16.         }  
  17.     target_url = "https://music.163.com/weapi/comment/resource/comments/get?csrf_token="   
  18.     res = requests.post(target_url, headers=headers, data=data)   
  19.     return res

  20. def find_depth(res):
  21.     soup = bs4.BeautifulSoup(res.text, 'html.parser')
  22.     depth = soup.find('a', class_='zbtn znxt js-n-1599034418092')
  23.     return int(depth)

  24. def get_all_comments(res):
  25.     comments_json = json.loads(res.text)
  26.     all_comments = comments_json['data']['comments']
  27.     with open('all_comments.txt', 'w', encoding='utf-8') as file:
  28.         for each in hot_comments:
  29.             file.write(each['user']['nickname'] + ':\n\n')
  30.             file.write(each['content'] + '\n')
  31.             file.write("---------------------------------------\n")
  32.             
  33. def main():
  34.     url = input("请输入链接地址:")
  35.     res = get_comments(url)
  36.     depth = find_depth(res)

  37.     result = []
  38.     for i in range(depth):
  39.         url = "https://music.163.com/#/song?id=1450574147"
  40.         res = get_comments(url)
  41.         result.extend(res)
  42.    
  43.     get_all_comments(res)

  44. if __name__ == "__main__":
  45.     main()
复制代码




                               
登录/注册后可看大图


运行就报错了,请问是什么原因吗?
最佳答案
2020-9-2 21:21:02
本帖最后由 1q23w31 于 2020-9-2 21:23 编辑

第一个问题:每一首歌曲的encSecKey和params是不同的,随便输入一个链接,网易云肯定会检测到你是爬虫,因为你发送的歌曲链接和评论地址对不上,

第二个问题:每一首歌曲中评论的class属性是不同的,你用一个不变的属性,来匹配随意一个歌曲的网页,结果肯定为空

第三个问题:你让输入的歌曲链接,貌似没有用到


                               
登录/注册后可看大图


你让输入的链接,到底是啥链接
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2020-9-2 18:06:40 | 显示全部楼层
depth = soup.find('a', class_='zbtn znxt js-n-1599034418092')没拿到数据
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-9-2 18:25:16 | 显示全部楼层
这个'a', class_='zbtn znxt js-n-1599034418092'查找条件有问题。没有在网页中找到,在浏览器response中搜索一下你查找的这个条件,如果找不到,说明是动态的,需要经过浏览器渲染后生成的。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-9-2 21:21:02 | 显示全部楼层    本楼为最佳答案   
本帖最后由 1q23w31 于 2020-9-2 21:23 编辑

第一个问题:每一首歌曲的encSecKey和params是不同的,随便输入一个链接,网易云肯定会检测到你是爬虫,因为你发送的歌曲链接和评论地址对不上,

第二个问题:每一首歌曲中评论的class属性是不同的,你用一个不变的属性,来匹配随意一个歌曲的网页,结果肯定为空

第三个问题:你让输入的歌曲链接,貌似没有用到


                               
登录/注册后可看大图


你让输入的链接,到底是啥链接
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-9-3 09:05:07 | 显示全部楼层
1q23w31 发表于 2020-9-2 21:21
第一个问题:每一首歌曲的encSecKey和params是不同的,随便输入一个链接,网易云肯定会检测到你是爬虫,因 ...

好哒 那我在重新思考一下
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-6-26 17:57

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表