爬虫5_QQ音乐《说好不哭》评论爬取及可视化

这篇博客讲述了作者如何使用Python爬取QQ音乐中周杰伦《说好不哭》的评论,并进行了词云图的制作。作者通过分析网页结构,发现评论数据是通过API接口动态加载的,使用requests库来获取这些数据。通过Postman简化了处理长URL和参数的过程。虽然爬取12500条评论耗时较长,但作者分享了完整的代码,并邀请读者提供改进建议。
摘要由CSDN通过智能技术生成

最近周杰伦的新歌《说好不哭》发布,我的朋友圈也是不断被刷屏,那就趁着热度,我们来看看网友们对这首歌的评论如何吧。
目标网址:https://y.qq.com/n/yqq/song/001qvvgF38HVc4.html?ADTAG=baiduald&play=1#comment_box

分析网页

我们打开QQ音乐找到《说好不哭》,页面下拉可以看到不少网友评论,起码在我爬的时候就已经有8800多页共22万条记录。

  • 通过Ctrl+U我们无法从源码中查看到评论内容。
  • 通过F12我们可以从渲染后的代码中找到评论内容。
  • 所以这种时候我们可以使用Selenium进行爬取,因为Selenium可以爬取渲染后的数据。
  • 但是这里我还是选择使用requests。
    在这里插入图片描述
  • F12–>Network–>XHR,我们就可以查看js加载的数据,可以看到我红框划出的这个url就是获取评论的接口url(https://c.y.qq.com/base/fcgi-bin/fcg_global_comment_h5.fcg),"?"后面的都是querystring。
  • 选中Preseve log,保证我们每次刷新页面的时候上一个页面js文件不会消失。
    在这里插入图片描述
  • 多往后翻几页评论我们查看一下url的规律,可以发现只有上图划出的pagenumlasthotcommentid是变化的,pagenum是当前评论的页数,lasthotcommentid是上一页评论列表里面的最后一条评论id。
    在这里插入图片描述
  • 我们访问一下这个Request URL(即在网址栏直接输入这个url),可以看到返回的都是json数据,我们要爬取的就是rootcommentcontent,每次调用API返回的一个json里面包括25条评论,所以最后一条评论的索引应该是24,就像response.json()['comment']['commentlist'][24]这样。
    在这里插入图片描述
  • 通过观察评论我们可以看到有很多用户会发表情,这在源码里的形式如上图红框所示,对于我们而言爬取下来是没有用的,所以在解析json的时候要把这个表情剔除。

小技巧

  • 我们可以看到访问评论API的url特别特别长,有很多参数需要加,所以给大家带来一个偷懒的方法。
    在这里插入图片描述
  • 打开Postman(https://www.getpostman.com/),将需要访问的url复制黏贴到地址栏,根据网页的请求方式在地址栏前选择相应的请求方式,点击Code。
    在这里插入图片描述
  • 弹出的对话框单击左上角的下拉框,选择Python–>Requests。
    在这里插入图片描述
  • 可以看到Postman就自动的生成了查询需要带入的参数字典。
  • 我们可以直接复制这整个代码使用。

词云图

在这里插入图片描述

  • 没有做词语的筛选,就直接按照之前爬取的评论做了张图,很奇怪怎么还会有薛之谦?

完整代码_爬取评论

"""
爬取周杰伦新歌《说好不哭》的评论
采用线程池,但好像并没有提速,直接存储在txt里面
自建的免费代理ip只有500多个所以我也就for循环了500页爬取了12500条数据
"""
import datetime
import re
from threading import RLock

import redis
import requests
from fake_useragent import UserAgent
from gevent.threadpool import ThreadPoolExecutor


class ShuoHaoBuKu(object):
    def __init__(self):
        """
        初始化线程池、锁、文件存储路径
        """
        self.redis_conn = redis.StrictRedis(host='localhost', port=6379, db=1)
        self.COMMENTT_TEXT = "./说好不哭评论.txt"
        self.threadpool = ThreadPoolExec
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值