关键词搜索

源码搜索 ×
×

用Python实现在网站上自动评论!键盘侠都喷不赢你!

发布2021-08-21浏览750次

详情内容

自从上次在B站看到一个喷子,一个人喷一堆人,当时我就看不过去了,直接用Python写了个自动评论软件,他说一句我能说十句,当场教育喷子~

于是乎,顺便整理一下,做了一手教程,分享给大家,当然不是教大家去做喷子,只是学学这么个技术~


不知道你们用的什么环境,我一般都是用的Python3.6环境和pycharm解释器,没有软件,或者没有资料,没人解答问题,都可以加这个群点我免费领取资料 包括今天的代码,过几天我还会做个视频教程出来,有需要也可以领取~
给大家准备的学习资料包括但不限于:
Python 环境、pycharm编辑器/永久激活/翻译插件
python 零基础视频教程
Python 界面开发实战教程
Python 爬虫实战教程
Python 数据分析实战教程
python 游戏开发实战教程
Python 电子书100本
Python 学习路线规划


模块:

  1. requests >>> pip install requests
  2. re
  3. time (时间模块 会给一个延时)
  4. random (随机) >>> 随机评论内容
  5. 内置模块 你只需要安装好python环境 自带的

实现案例思路:

一. 数据来源分析(爬虫)

  1. 先手动去评论一下 (网站发送请求的情况是什么的)
  2. 找请求url地址 评论发送请求地址
  3. 通过开发者工具进行抓包分析
  4. post请求: 需要提交一个表单
  5. [评论多个视频,比如这个up主所有视频,都进行评论]
  6. 1. 通过开发者工具进行抓包分析: 可以找到评论请求地址 [oid参数变化: 每一个视频都对应一个oid]
  7. 2. 分析 oid 参数的来源 >>> 在视频详情页的网页源代码里面就有 oid 参数
  8. 3. 每个视频详情页的url 都是有一个bv号 BV1764y1e7eu
  9. 4. 找到所有视频的 bv 号 [找视频的ID] 在视频列表找到 视频的BV号

二. 代码实python教程

  1. 1. 发送请求 对于视频列表页发送请求
  2. 2. 获取数据 获取json字典数据
  3. 3. 解析数据 提取 视频Bv号
  4. 4. 发送请求 对于视频详情页url地址发送请求
  5. 5. 获取数据 网页源代码 视频里面 oid 参数
  6. 6. 实现评论
  7. 7. 进行多个/全部 视频评论


来 直接上代码

详细解释我都打在注释了,今天容我懒一波~

复制代码

import requests  # 数据请求模块  pip install requests
import pprint  # 格式化输出的模块 内置模块
import re  # 正则表达式 内置模块
import random  # 随机模块 内置模块
import time  # 时间模块 内置模块 Python学习群872937351

headers = {
    'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.159 Safari/537.36'
}


def get_response(html_url):
    """发送请求"""
    # headers请求头 作用?   把python代码伪装成浏览器
    # cookie: 主要是用检测是否有登录账号 用户信息
    # user-agent: 浏览器基本信息
    response = requests.get(url=html_url, headers=headers)
    return response


def get_video_bv(html_url):
    """获取视频BV号"""
    response = get_response(html_url)
    # 获取json字典数据
    json_data = response.json()
    # 解析数据 json直接解析提取 根据冒号左边的内容 提取冒号右边的内容
    v_list = json_data['data']['list']['vlist']
    # 列表推导式
    v_list = [i['bvid'] for i in v_list]
    # lis = []
    # v_list 是一个列表 列表里面每一个元素都是一个字典
    # 想要获取列表中的每个元素 通过遍历 for循环 i就是字典
    # for i in v_list:
    #     lis.append(i['bvid'])
    # print(v_list)
    # pprint.pprint(response.json())
    return v_list


def get_video_oid(video_bv_id):
    """获取视频的oid参数"""
    # f'{}' 字符串的格式化方法  '{page}'.format(page)
    # bv 号传入url地址当中
    video_url = f'https://www.bilibili.com/video/{video_bv_id}'
    response = get_response(video_url)
    # 函数返回值 \d+ 匹配\d 匹配一个数字 \d+ 是匹配多个数字
    # 正则表达式  oid
    # <script>window.__INITIAL_STATE__={"aid":(762391044),
    # () 精确匹配 表示我要的内容就是括号里面的内容 每一个视频的oid都不一样
    # \d 表示的匹配一个数字 \d+ 表示匹配多个数字 .*? 表示匹配任意字符
    # .*?
    oid = re.findall('<script>window\.__INITIAL_STATE__={"aid":(.*?)', response.text)[0]
    return oid


def comment(oid):
    """评论"""
    comment_list = ['6666', 'up主牛皮', 'python牛皮', '牛皮']
    content = random.choice(comment_list)
    comment_url = 'https://api.bilibili.com/x/v2/reply/add'
    data = {
        'oid': oid,
        'type': '1',
        'message': content,
        'plat': 1,
        'ordering': 'heat',
        'jsonp': 'jsonp',
        'csrf': '0f085ffe952fc8658bfae7a34de1b1d6'
    }
    response = requests.post(url=comment_url, data=data, headers=headers)
    status_code = response.status_code  # 获取状态码
    return status_code


def main(html_url):
    """主函数"""
    v_list = get_video_bv(html_url=html_url)
    for index in v_list:
        time.sleep(2)
        oid = get_video_oid(index)
        status_code = comment(oid)
        if status_code == 200:
            print(f'{index}评论成功')
        else:
            print(f'{index}评论失败')


if __name__ == '__main__':
    for page in range(1, 15):
        print('稍等五秒钟')
        time.sleep(5)
        url = f'https://api.bilibili.com/x/space/arc/search?mid=16682415&ps=30&tid=0&pn={page}&keyword=&order=pubdate&jsonp=jsonp'
        main(url)

复制代码

作者:静默虚空

相关技术文章

点击QQ咨询
开通会员
返回顶部
×
微信扫码支付
微信扫码支付
确定支付下载
请使用微信描二维码支付
×

提示信息

×

选择支付方式

  • 微信支付
  • 支付宝付款
确定支付下载