鱼C论坛

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

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

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

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

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

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

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

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

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

if __name__ == "__main__":
    main()



                               
登录/注册后可看大图


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

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

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

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


                               
登录/注册后可看大图


你让输入的链接,到底是啥链接
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-9-2 18:06:40 | 显示全部楼层
depth = soup.find('a', class_='zbtn znxt js-n-1599034418092')没拿到数据
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

使用道具 举报

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

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

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

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


                               
登录/注册后可看大图


你让输入的链接,到底是啥链接
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

好哒 那我在重新思考一下
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-1-18 20:22

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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