登录       
  人生苦短,必用Python

Python带你看不一样的《青春有你2》小姐姐之评论爬取

Python KenZhang 75浏览 0评论

本篇文章开始我们爬取爱奇艺上《青春有你2》下面的评论内容,进行词频统计并可视化,然后制作词云来展示最关心的问题。


本篇文章,我们先来爬取评论数据,并进行预处理,下篇文章我们使用处理好的数据进行词频统计和可视化,以及制作词云。


我们先来看下步骤:

1. 爬取爱奇艺《青春有你2》评论数据,爬取评论条数不能少于1000条

2. 数据预处理:清理清洗评论中的特殊符号及表情符,并保存为txt文档


下面我们就来一步一步实现爬取数据。


1

爬取爱奇艺《青春有你2》评论数据

我们以第22期为例在浏览器打开网址https://www.iqiyi.com/v_19rxwechv0.html,选择第22期下的视频,然后按F12打开调试工具,找到评论位置,发现我们需要去点"查看更多评论"去显示下20条评论,如下图,当点击后,会有个GET请求发出,我们只需需要去构造这个网址,就可以得到所有评论。


网址中?后面的一般都是参数,所以我们只需要用https://sns-comment.iqiyi.com/v3/comment/get_comments.action?这个网址加上需要的参数构造完整的网址就可以了。

0.png


1.png

爬取评论内容代码:



















import requests
import json
import re

# 请求爱奇艺评论接口,返回response信息
def get_movie_info(last_id):    """   请求爱奇艺评论接口,返回response信息   参数  last_id: 评论翻页   :return: response信息   """
   headers = {        "Host": "sns-comment.iqiyi.com",        "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:75.0) Gecko/20100101 Firefox/75.0",        "Accept": "*/*",        "Accept-Language": "zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2",        "Accept-Encoding": "gzip, deflate, br",        "Connection": "keep-alive",        "Referer": "https://www.iqiyi.com/v_19ryfkiv8w.html",        "DNT": "1"    }    # content_id:视频ID    # last_id:控制评论翻页    url = "https://sns-comment.iqiyi.com/v3/comment/get_comments.action?"
   params = {        "agent_type": "118",        "agent_version": "9.11.5",        "authcookie": "null",        "business_type": "17",        "content_id": "16361088000",        "hot_size": "0",        "last_id": last_id,        "page": "",        "page_size": "20",        "types": "time"    }
   for key, value in params.items():        url = url + key + "=" + value + "&"    r = requests.get(url, headers=headers)    # print(r.text)    if r.status_code == 200:        return r.text    return None  def save_movie_info_to_file(last_id, arr):    """   解析json数据,获取评论   参数  last_id:最后一条评论ID  arr:存放文本的list   :return: 新的last_id   """    response_text = get_movie_info(last_id)    response_json = json.loads(response_text)    comments = response_json["data"]["comments"]    if comments:        for comment in comments:            if "content" in comment.keys():                arr.append(comment['content'])        last_id = str(comment["id"])
   return last_id


2

对评论内容数据清洗,保存为txt文件

我们把上面爬取的评论内容进行清洗,去除特殊字符和表情,保存为content.txt文件


def filter_str(des_str, res_tr=''):    """    过滤除中英文及数字以外的其他字符    """    res = re.compile("[^\u4e00-\u9fa5^a-z^A-Z^0-9]")    return res.sub(res_tr, des_str)

def filter_emoji(des_str, res_tr=''):    """过滤表情"""    try:        res = re.compile(u'[\U00010000-\U0010ffff]')    except re.error:        res = re.compile(u'[\uD800-\uDBFF][\uDC00-\uDFFF]')    return res.sub(res_tr, des_str)

def clear_special_char(arr):    """    正则处理特殊字符    参数 arr:原文本, list格式    return: 清除后的文本    """
   new_arr = []    for content in arr:        if content:            content = filter_str(content)            content = filter_emoji(content)            # print(content)            with open("content.txt", "a") as f:                f.write(content + "\n")            new_arr.append(content)
   return new_arr


3

我们在主函数中实现完整逻辑

if __name__ == "__main__":
   org_last_id = "245317717421"    comment_list = []    while org_last_id != "":        new_last_id = save_movie_info_to_file(org_last_id, comment_list)        if new_last_id == org_last_id:            break        org_last_id = new_last_id    # print(comment_list)    # 清洗数据,去除特殊字符和表情符,并保存为txt文档    new_comment_list = clear_special_char(comment_list)    # print(new_comment_list)

至此,我们得到了所有评论信息并保存了下来,看一下我们保存的结果,评论内容保存在content.txt里面

640.png


下一篇我们将用这些信息去做一些分析,进行词频统计并可视化展示,制作词云,并利用第三方模块进行内容审核。


转载请注明: KenZhang » Python带你看不一样的《青春有你2》小姐姐之评论爬取

喜欢 (2) or 分享 ( 0)

联系我请直接在公众号留言~

扫码或搜索:极简小课

极简小课

微信公众号 扫一扫关注

想结交更多的朋友吗?

来PyDjango瞧瞧吧

PyDjango

QQ群号 88133982 立即加入

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请狠狠点击下面的