评论区抽奖程序2.0

Posted 布小禅

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了评论区抽奖程序2.0相关的知识,希望对你有一定的参考价值。

评论区抽奖程序2.0

稍微的加了一点点功能,让程序更加的自动化了

【送书活动】

每周三发文章送书,两本

开奖时间为周五晚上8.00

下周书籍寄出

关注博主,每周抽奖

1. 程序作用

从某CSDN文章的评论区抽取人,至于抽人干嘛,看你自己咯

反正我是抽人送书的

程序1.0源代码:

模块导入:

import random
import requests
import json
import jsonpath

提取数据函数:

def get_name(head, num):
    """总共几页循环几次"""
    ans = []  # 返回值
    for i in range(num):
        url = "https://blog.csdn.net/phoenix/web/v1/comment/list/120535359?page=%d&size=10&comment_id=" % (i+1)
        get_html = requests.post(url, headers=head).content  # 获取评论区数据
        json_data = json.loads(get_html)   # 转为python数据
        name_li = jsonpath.jsonpath(json_data, '$..nickName')
        ans += name_li
    return ans

随机数抽取人函数:

def chou_jiang(li):
    """
    随机数函数抽奖
    参数为评论用户的用户名
    :param li:
    :return: None
    """
    i = len(li)
    j = random.randint(0, i-1)
    return li[j]

main函数:

if __name__ == '__main__':
    head = {
    "user-agent": "你自己的请求头",
    "Cookie": "你自己的cookie"
	}
    name_list = get_name(head, 3)
    prize_user = chou_jiang(name_list)
    print("获奖者是:", prize_user)

2. 上面版本回顾

  1. 使用使用爬虫基本知识解析网页
  2. 拿到评论区接口
  3. 经过测试必须要cookie
  4. 评论区接口为json格式文件
  5. 使用jsonpath提取评论用户
  6. 使用random模块随机从列表中选择一个人
  7. 主函数输出结果

缺点:

  1. 不够自动化
  2. 文章的评论接口需要自己手动粘贴
  3. 提示信息不够明显
  4. 一次只能抽取一位

3. 加点功能

  1. 提示输入评论区页数(下个版本改成自动)
  2. 提示输入文章ID
  3. 提示输入抽奖人数

4. 查看接口相似处

就拿我最近的两个文章作比较吧

  1. https://bxcblog.blog.csdn.net/article/details/121127815
  2. https://bxcblog.blog.csdn.net/article/details/121111567

再看看他们两个的接口:

  1. https://blog.csdn.net/phoenix/web/v1/comment/list/121127815?page=1&size=10&comment_id=
  2. https://blog.csdn.net/phoenix/web/v1/comment/list/121111567?page=1&size=10&comment_id=

可以看到他们竟然只有文章id不一样,所以,嘿嘿嘿

4.1 数据提取函数

可以把原代码的get函数稍微的改一下

def get_name(head: dict, num: int, id: int)->list:
    """总共几页循环几次"""
    ans = []  # 返回值
    for i in range(num):
        url = f"https://blog.csdn.net/phoenix/web/v1/comment/list/{id}?page={i+1}&size=10&comment_id="
        get_html = requests.post(url, headers=head).text  # 获取评论区数据
        json_data = json.loads(get_html)  # 转为python数据
        name_li = jsonpath.jsonpath(json_data, '$..nickName')
        ans += name_li
    return ans

我们把文章id使用了函数的形参,这样我们就可以做出一些操作使其增加操作性

4.2 主函数

控制抽取几名的方法我控制在了主函数

if __name__ == '__main__':
    head = {
    "user-agent": "你自己的请求头",
    "Cookie": "你自己的cookie"
	}
    num = int(input("请输入评论区的页数:"))
    id = int(input("请输入文章id(在文章链接的最后部分哦):"))
    name_list = get_name(head, num, id)
    prize_num = int(input("请输入中奖人数:"))
    print("""###################""")
    for i in range(prize_num):
        prize_user = chou_jiang(name_list)
        print("获奖者是:", prize_user)
        time.sleep(2)

这样我们的程序就完成了

5. 大功告成

程序源代码

#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Author: Smly
# @datetime: 2021/10/31 17:46 
# @Version: 2.0
"""
主要增加了手动输入文章参数,评论区页数和抽奖人数的功能
"""
import time

import requests
import json
import jsonpath
import random


def get_name(head: dict, num: int, id: int)->list:
    """总共几页循环几次"""
    ans = []  # 返回值
    for i in range(num):
        # https://blog.csdn.net/phoenix/web/v1/comment/list/121127815?page=1&size=10&comment_id=
        url = f"https://blog.csdn.net/phoenix/web/v1/comment/list/{id}?page={i+1}&size=10&comment_id="
        get_html = requests.post(url, headers=head).text  # 获取评论区数据
        json_data = json.loads(get_html)  # 转为python数据
        name_li = jsonpath.jsonpath(json_data, '$..nickName')
        ans += name_li
    return ans


def chou_jiang(li):
    """
    随机数函数抽奖
    参数为评论用户的用户名
    :param li:
    :return: None
    """
    i = len(li)
    j = random.randint(0, i - 1)
    return li[j]


if __name__ == '__main__':
    head = {
    "user-agent": "你自己的请求头",
    "Cookie": "你自己的cookie"
	}
    num = int(input("请输入评论区的页数:"))
    id = int(input("请输入文章id(在文章链接的最后部分哦):"))
    name_list = get_name(head, num, id)
    prize_num = int(input("请输入中奖人数:"))
    print("""###################""")
    for i in range(prize_num):
        prize_user = chou_jiang(name_list)
        print("获奖者是:", prize_user)
        time.sleep(2)

6. 注意事项

在你使用本程序的时候,你需要

  1. 配置Python环境
  2. 提取你的cookie
  3. 提取你的请求头

以上是关于评论区抽奖程序2.0的主要内容,如果未能解决你的问题,请参考以下文章

评论区抽奖程序

评论区抽奖程序

文末送书Python实现评论区抽奖功能

b站动态评论区抽奖 python版(已打包成exe,可以下载食用)

重磅历史性时刻:本周周榜第八名,突破一万粉丝,首次解密快速涨粉秘诀!(在本篇文章评论区抽奖送书)

重磅历史性时刻:本周周榜第八名,突破一万粉丝,首次解密快速涨粉秘诀!(在本篇文章评论区抽奖送书)