美文网首页
Python采集豆某影片并作词云图分析

Python采集豆某影片并作词云图分析

作者: 颜狗一只 | 来源:发表于2023-01-30 19:59 被阅读0次

    前言

    嗨喽~大家好呀,这里是魔王呐 ❤ ~!

    image

    环境使用:

    • Python 3.8 解释器

    • Pycharm 编辑器

    模块使用:

    • import parsel >>> pip install parsel

    • import requests >>> pip install requests

    • import csv

    爬虫基本思路:

    一. 数据来源分析:

    1. 明确需求

      • 明确采集的网站是什么?

      • 明确采集的数据是什么?

        影评相关数据内容: 昵称/时间/内容/归属地...

    2. 抓包分析

      通过开发者工具进行抓包分析

      • 打开开发者工具: 在网页上面 F12 / 鼠标右键点击检查选择network

      • 刷新网页: 让网页数据重新加载一遍

      • 通过关键字搜索数据来源: 关键字<要获取的数据>

    二. 代码实现步骤:

    1. 发送请求, 模拟浏览器对于url地址发送请求

    2. 获取数据, 获取服务器返回响应数据

      开发者工具: response

    3. 解析数据, 提取我们想要的数据内容\

      影评相关数据

    4. 保存数据, 把数据内容保存csv表格文件里面

    代码展示

    # 导入数据请求模块 --> 第三方模块, 需要安装 pip install requests
    import requests
    # 导入数据解析模块 --> 第三方模块, 需要安装 pip install parsel
    import parsel
    # 导入csv模块 --> 内置模块, 不需要安装
    import csv
    

    """

    • 安装模块:
      1. win + R 输入cmd 然后输入 安装命令 pip install requests
      2. 在pycharm终端里面 输入安装命令 pip install requests
    • 模拟浏览器: --> headers 请求头 <开发者工具进行复制>
      把python代码伪装成浏览器去发送请求
      目的: 为了防止被反爬
      反爬: 你得不到数据, 或者返回的数据不是你想要的
    • 如何批量替换
      1. 选中替换内容, ctrl + R
      2. 勾选上 .* 正则
      3. 输入正则匹配规则, 进行替换
      :.*
      ,
    • 采集的速度过快/频繁, 可能会IP异常
      解决方法:
      1. 登陆账号加上cookie
      2. 用IP代理, 切换IP
      免费的IP, https 可能用不了 HTTP有一些可以的, 质量不好
      氪金的IP 一个IP 几分钱一个
      • 多页的数据采集
        分析请求链接的变化规律

    你要从事pachong岗位, 这方面工作: <采集的数据量比较大>
    天天和反爬打交道了JS逆向,加密 反爬IP被封,账号被封

    """

    1. 发送请求, 模拟浏览器对于url地址发送请求
    # 0<起始数包含>, 201<末尾数不包含>, 20<步长>
    for page in range(0, 201, 20):
        # 请求链接 字符串格式化方法 -->
        url = f'https://movie.****.com/subject/4811774/comments?start={page}&limit=20&status=P&sort=new_score'
        # 伪装模拟
        headers = {
            # User-Agent 用户代理, 表示浏览器基本身份信息
            'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/101.0.0.0 Safari/537.36'
        }
        # 发送请求
        response = requests.get(url=url, headers=headers)
    

    """

    1. 获取数据, 获取服务器返回响应数据

      开发者工具: response

      response.text --> 获取响应文本数据

      response --> 响应对象

      text --> 文本

    """

        # 把获取下来html字符传数据<response.text>, 转换可解析的对象
        selector = parsel.Selector(response.text)
    

    """

    1. 解析数据, 提取我们想要的数据内容

      影评相关数据

      css选择器: 根据标签属性提取数据内容

    """

        # 第一次提取所有内容
        divs = selector.css('div.comment-item')
        # 把列表里面元素一个一个提取出来, for循环遍历
        for div in divs:
            """
            湖南 长沙
            .comment-info a::text --> 提取类名为comment-info标签下面a标签里面文本数据
            get() --> 获取第一个标签数据, 返回字符串数据类型
            attr() --> 获取标签里面属性
            """
            name = div.css('.comment-info a::text').get()  # 昵称
            rating = div.css('.rating::attr(title)').get()  # 评分
            date = div.css('.comment-time ::attr(title)').get()  # 日期
            area = div.css('.comment-location::text').get()  # 归属地
            short = div.css('.short::text').get().replace('\n', '')  # 评论
            count = div.css('.vote-count::text').get()  # 有用
            # 把数据放到字典里面
            dit = {
                '昵称': name,
                '评分': rating,
                '日期': date,
                '归属地': area,
                '评论': short,
                '有用': count,
            }
            # 写入数据
            csv_writer.writerow(dit)
            print(name, rating, date, area, short, count)
    

    创建文件对象

    f = open('影评.csv', mode='a', encoding='utf-8-sig', newline='')
    # f 文件对象 fieldnames 表头/字段名
    csv_writer = csv.DictWriter(f, fieldnames=[
        '昵称',
        '评分',
        '日期',
        '归属地',
        '评论',
        '有用',
    ])
    
    # 写入表头
    csv_writer.writeheader()
    

    绘制词云图

    模块导入

    # 导入结巴模块 --> 第三方模块, 需要安装 pip install jieba
    import jieba
    # 导入pandas --> 第三方模块, 需要安装 pip install pandas
    import pandas as pd
    # 导入词云模块 --> 第三方模块, 需要安装 pip install wordcloud
    import wordcloud
    

    读取csv表格里面数据内容

    df = pd.read_csv('影评.csv')
    

    获取评论内容

    content_list = df['评论'].to_list()
    # 把列表转成字符串
    content = ''.join(content_list)
    # 进行分词处理
    string = ' '.join(jieba.lcut(content))
    

    词云图配置

    wc = wordcloud.WordCloud(
        width=1000,  # 宽
        height=700,  # 高
        background_color='white',  # 背景颜色
        font_path='msyh.ttc', # 设置字体
        stopwords={'了', '的', '是', '我', '在', '和'},
        scale=15
    )
    # 传入文字内容
    wc.generate(string)
    # 输出词云图
    wc.to_file('词云图.png')
    print(string)
    

    尾语 💝

    要成功,先发疯,下定决心往前冲!

    学习是需要长期坚持的,一步一个脚印地走向未来!

    未来的你一定会感谢今天学习的你。

    —— 心灵鸡汤

    本文章到这里就结束啦~感兴趣的小伙伴可以复制代码去试试哦 😝

    image

    相关文章

      网友评论

          本文标题:Python采集豆某影片并作词云图分析

          本文链接:https://www.haomeiwen.com/subject/vgzmhdtx.html