基于Python实现评论区抽奖功能详解

目录
  • 1. 分析评论接口
  • 2. 获取评论数据
  • 3. 筛选评论用户
  • 4. 抽取幸运观众
  • 5. 完整源码
    • 5.1 字符串截取的方式
    • 5.2 正则匹配方式
    • 5.3 执行结果

1. 分析评论接口

首先,我们需要找到评论数据的「接口」,也就是网站获取评论数据的请求。

打开一个需要抽奖的文章,进入「开发者模式」(按F12 或 右键检查),选中 Network 选项,同时「刷新」文章页面,使其重新发送请求,在右侧工具栏中观察页面发送的请求,逐个分析请求,根据响应内容判断出获取评论的请求

在 Headers 栏中可以查看完整「请求」

https://blog.csdn.net/phoenix/web/v1/comment/list/121888905?page=1&size=3&commentId=

2. 获取评论数据

有了接口以后,我们使用 requests 模块发送请求,获取评论的数据

注意请求中的两个参数: page 和 size

1.page 表示第几页,此处传 1 即可

2.size 表示每页显示几条数据,此处传 100 (有几条评论就写几)

import requests

# 评论请求连接
url = 'https://blog.csdn.net/phoenix/web/v1/comment/list/121888905?page=1&size=100&commentId='
# 请求头
header = {
        "User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.130 Safari/537.36"
    }

# 获取评论的请求数据(json字符串)
page = requests.get(url, headers=header)
print(page.text)

3. 筛选评论用户

nickName 字段保存评论用户名称,我们将获取到的数据根据 ,分隔成数组,再筛选出包含 nickName 的数据,即可获取所有评论用户的名称,核心代码如下

titles = page.text.split(',')  # 获取每一个字段
names = []  # 存放评论者名称的数组
for t in titles:
    # 获取所有评论者字段
    if 'nickName' in t and '"nickName":"士别三日wyx"' not in t:
        name = t[12:len(t)-1]  # 截取评论者名称
        names.append(name)  # 添加评论者名称至数组
print(names)

除了上面的方式外,也可使用正则表达式来匹配用户的名称,核心代码如下

# 获取所有评论者名称
names = re.findall('nickName":"([^"]*)",', page.text)
pond = []  # 奖池
for name in names:
    if '士别三日wyx' not in name:
        pond.append(name)  # 将参与者放入奖池

4. 抽取幸运观众

使用 random.choice 函数生成随机用户,作为幸运观众,核心代码如下

# 随机生成幸运观众
star = random.choice(pond)
print('参与抽奖人数: %d' % len(pond))
print('幸运观众:%s' % star)

5. 完整源码

5.1 字符串截取的方式

使用「截取字符串」的方式筛选数据,精确度较高,适用于绝大部分场景

import requests
import random

# 评论请求连接
url = 'https://blog.csdn.net/phoenix/web/v1/comment/list/121888905?page=1&size=100&commentId='
# 请求头
header = {
        "User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.130 Safari/537.36"
    }

# 获取评论的请求数据(json字符串)
page = requests.get(url, headers=header)
titles = page.text.split(',')  # 获取每一个字段
names = []  # 存放评论者名称的数组
for t in titles:
    # 获取所有评论者字段
    if 'nickName' in t and '"nickName":"士别三日wyx"' not in t:
        name = t[12:len(t)-1]  # 截取评论者名称
        names.append(name)  # 添加评论者名称至数组

# 随机生成幸运观众
star = random.choice(pond)
print('参与抽奖人数: %d' % len(names))
print('幸运观众:%s' % star)

5.2 正则匹配方式

使用「正则匹配」的方式筛选数据,有一定误差(用户名中不能包含 " )

import requests
import random
import re

# 评论请求连接
url = 'https://blog.csdn.net/phoenix/web/v1/comment/list/121888905?page=1&size=100&commentId='
# 请求头
header = {
        "User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.130 Safari/537.36"
    }

# 获取评论的请求数据(json字符串)
page = requests.get(url, headers=header)
# 获取所有评论者名称
names = re.findall('nickName":"([^"]*)",', page.text)
pond = []  # 奖池
for name in names:
    if '士别三日wyx' not in name:
        pond.append(name)  # 将参与者放入奖池

# 随机生成幸运观众
star = random.choice(pond)
print('参与抽奖人数: %d' % len(pond))
print('幸运观众:%s' % star)

5.3 执行结果

测试结果1

E:\data\PrCharm\pythonProject\venv\Scripts\python.exe E:/data/PrCharm/pythonProject/award.py

参与抽奖人数: 15

幸运观众:Willing 卡卡

Process finished with exit code 0

测试结果2 

E:\data\PrCharm\pythonProject\venv\Scripts\python.exe E:/data/PrCharm/pythonProject/award.py

参与抽奖人数: 15

幸运观众:小辉_Super

Process finished with exit code 0

以上就是基于Python实现评论区抽奖功能详解的详细内容,更多关于Python评论区抽奖功能的资料请关注我们其它相关文章!

(0)

相关推荐

  • python实现抽奖小程序

    本文实例为大家分享了python实现抽奖小程序的具体代码,供大家参考,具体内容如下 设计一个抽奖服务  背景:有x个奖品,要求在y天内发完:每天至少发放z个奖品:每天抽奖人数不定,事先会假设一个范围是m-n 举例:有100个奖品,要求5天内发完,每天至少发15个奖品:每天来抽奖的人估计是 2000-3000 人,希望奖品能够比较均匀,但随机的抽取出来. 接口要求:服务监听一个端口,测试程序不断连接,发送一个数字代表是第几天,比如第1-2000个请求发送1(模拟第一天来了2000人),第2001到

  • 编写python代码实现简单抽奖器

    这篇文章主要为大家详细介绍了python编写实现抽奖器,文中代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下 # coding=utf-8 import sys import os import openpyxl if sys.version_info[0] == 2: import Tkinter from Tkinter import * else: import tkinter as Tkinter from tkinter import * from tkinter

  • 教你用Python实现一个轮盘抽奖小游戏

    一.Python GUI 编程简介 Tkinter 模块(Tk 接口)是 Python 的标准 Tk GUI 工具包的接口 .Tk 和 Tkinter 可以在大多数的 Unix 平台下使用,同样可以应用在 Windows 和 Macintosh 系统里.Tk8.0 的后续版本可以实现本地窗口风格,并良好地运行在绝大多数平台中. wxPython 是一款开源软件,是 Python 语言的一套优秀的 GUI 图形库,允许 Python 程序员很方便的创建完整的.功能健全的 GUI 用户界面. pyq

  • python实现盲盒抽奖功能(减库存)

    案例名称:盲盒抽奖 案例描述: 某比赛共设三个奖项,分别是:一等奖.二等奖.三等奖, 一等奖的奖品有三种选择:电饭煲.空调.洗衣机, 二等奖的奖品有三种选择:球鞋.手表.滑板, 三等奖的奖品有三种选择:对联.手袋.钙片 现需要编写一个函数,函数中设置一个参数,该参数用来接收对应奖项的字符串. 即:如果参数值等于'一等奖',则返回对应奖项下可选择奖品的任意一个,从而实现盲盒抽取效果. 如果参数值的字符串不是一等奖.二等奖或者三等奖,则直接返回输入有误,没有该奖项字样.比如:参数值等于'四等奖',则

  • 如何基于python实现年会抽奖工具

    用python来实现一个抽奖程序,供大家参考,具体内容如下 主要功能有 1.从一个csv文件中读入所有员工工号 2.将这些工号初始到一个列表中 3.用random模块下的choice函数来随机选择列表中的一个工号 4.抽到的奖项的工号要从列表中进行删除,以免再次抽到 初级版 这个比较简单,缺少定制性,如没法设置一等奖有几名,二等奖有几名 import csv #创建一个员工列表 emplist = [] #用with自动关闭文件 with open('c://emps.csv') as f: e

  • python制作抽奖程序代码详解

    实现制作抽奖程序,需要认知到我们可以看到一般抽奖程序界面上是有很多按钮的,比如中奖区域,按键开始区域等等,所以我们先要设置界面,然后把这些按钮添加到界面中去,想必这对于学过tkinter的同学应该不难.下面结合实现步骤:设计界面.利用循环.多线程来完成抽奖程序设置吧. 实现代码: import random #导入内置的random模块 list1=list(range(0,15)) #将range元素进行列表转换并赋值给列表list1 print("抽奖号码是:",list1) #打

  • Python制作一个随机抽奖小工具的实现

    目录 1. 核心功能设计 2. GUI设计与实现 3. 功能实现 3.1 读取人员名单 3.2. 随机抽奖 3.3. 保存中奖名单 3.4. GUI交互逻辑 最近在工作中面向社群玩家组织了一场活动,需要进行随机抽奖,参考之前小明大佬的案例,再结合自己的需求,做了一个简单的随机抽奖小工具. 今天我就来顺便介绍一下这个小工具的制作过程吧! 先看效果: 1. 核心功能设计 针对随机抽奖的小工具,需要可以导入参与抽奖的人员名单,然后选择不同的奖励类型进行随机抽取获奖名单并导出. 那么,简单进行需求拆解,

  • python编写实现抽奖器

    本文实例为大家分享了python编写实现抽奖器的具体代码,供大家参考,具体内容如下 # coding=utf-8 import sys import os import openpyxl if sys.version_info[0] == 2: import Tkinter from Tkinter import * else: import tkinter as Tkinter from tkinter import * from tkinter import messagebox impor

  • 基于Python实现评论区抽奖功能详解

    目录 1. 分析评论接口 2. 获取评论数据 3. 筛选评论用户 4. 抽取幸运观众 5. 完整源码 5.1 字符串截取的方式 5.2 正则匹配方式 5.3 执行结果 1. 分析评论接口 首先,我们需要找到评论数据的「接口」,也就是网站获取评论数据的请求. 打开一个需要抽奖的文章,进入「开发者模式」(按F12 或 右键检查),选中 Network 选项,同时「刷新」文章页面,使其重新发送请求,在右侧工具栏中观察页面发送的请求,逐个分析请求,根据响应内容判断出获取评论的请求 在 Headers 栏

  • 基于Python的Android图形解锁程序详解

    安卓手机的图形锁是3x3的点阵,按次序连接数个点从而达到锁定/解锁的功能.最少需要连接4个点,最多能连接9个点.网上也有暴力删除手机图形锁的方法,即直接干掉图形锁功能.但假如你想进入别人的手机,但又不想引起其警觉的话--你可以参考一下本文(前提条件:手机需要root,而且打开调试模式.一般来讲,如果用过诸如"豌豆荚手机助手"."360手机助手"一类的软件,都会被要求打开调试模式的.如果要删除手机内置软件,则需要将手机root). 首先科普一下,安卓手机是如何标记这9

  • Python+OpenCV实现图像识别替换功能详解

    OpenCV-Python是一个Python库,旨在解决计算机视觉问题. OpenCV是一个开源的计算机视觉库,1999年由英特尔的Gary Bradski启动.Bradski在访学过程中注意到,在很多优秀大学的实验室中,都有非常完备的内部公开的计算机视觉接口.这些接口从一届学生传到另一届学生,对于刚入门的新人来说,使用这些接口比重复造轮子方便多了.这些接口可以让他们在之前的基础上更有效地开展工作.OpenCV正是基于为计算机视觉提供通用接口这一目标而被策划的. 安装opencv pip3 in

  • 基于python中的TCP及UDP(详解)

    python中是通过套接字即socket来实现UDP及TCP通信的.有两种套接字面向连接的及无连接的,也就是TCP套接字及UDP套接字. TCP通信模型 创建TCP服务器 伪代码: ss = socket() # 创建服务器套接字 ss.bind() # 套接字与地址绑定 ss.listen() # 监听连接 inf_loop: # 服务器无限循环 cs = ss.accept() # 接受客户端连接 comm_loop: # 通信循环 cs.recv()/cs.send() # 对话(接收/发

  • Python爬虫爬验证码实现功能详解

    主要实现功能: - 登陆网页 - 动态等待网页加载 - 验证码下载 很早就有一个想法,就是自动按照脚本执行一个功能,节省大量的人力--个人比较懒.花了几天写了写,本着想完成验证码的识别,从根本上解决问题,只是难度太高,识别的准确率又太低,计划再次告一段落. 希望这次经历可以与大家进行分享和交流. Python打开浏览器 相比与自带的urllib2模块,操作比较麻烦,针对于一部分网页还需要对cookie进行保存,很不方便.于是,我这里使用的是Python2.7下的selenium模块进行网页上的操

  • 基于Python __dict__与dir()的区别详解

    Python下一切皆对象,每个对象都有多个属性(attribute),Python对属性有一套统一的管理方案. __dict__与dir()的区别: dir()是一个函数,返回的是list: __dict__是一个字典,键为属性名,值为属性值: dir()用来寻找一个对象的所有属性,包括__dict__中的属性,__dict__是dir()的子集: 并不是所有对象都拥有__dict__属性.许多内建类型就没有__dict__属性,如list,此时就需要用dir()来列出对象的所有属性. __di

  • 基于Python的文件类型和字符串详解

    1. Python的文件类型 1. 源代码--直接由Python解析 vi 1.py #!/usr/bin/python print 'hello world' 这里的1.py就是源代码 执行方式和shell脚本类似: chmod +x 后,./1.py Python 1.py 2. 字节代码 Python源码文件经编译后生成的扩展名为pyc的文件 编译方法: [root@t1 py]# cat 2.py #!/usr/bin/python import py_compile py_compil

  • Python+MediaPipe实现检测人脸功能详解

    目录 MediaPipe概述 人脸检测 MediaPipe概述 谷歌开源MediaPipe于2019年6月首次推出.它的目标是通过提供一些集成的计算机视觉和机器学习功能,使我们的生活变得轻松. MediaPipe是用于构建多模态(例如视频.音频或任何时间序列数据).跨平台(即eAndroid.IOS.web.边缘设备)应用ML管道的框架. Mediapipe还促进了机器学习技术在各种不同硬件平台上的演示和应用程序中的部署. 应用 人脸检测 多手跟踪 头发分割 目标检测与跟踪 目标:三维目标检测与

  • Java基于命令模式实现邮局发信功能详解

    本文实例讲述了Java基于命令模式实现邮局发信功能.分享给大家供大家参考,具体如下: 一. 模式定义 命令模式,将来自客户端的请求封建为一个对象,无须了解这个请求激活的动作或有关接受这个请求的处理细节.命令模式的根本目的在于将"请求者"与"实现者"之间解耦. 二. 模式举例 1 模式分析 我们借用邮局发信来说明这一模式. 2 命令模式静态类图 3 代码示例 3.1信件接收者接口一IReceiver package com.demo.receiver; /** * 信

  • Python实现基于KNN算法的笔迹识别功能详解

    本文实例讲述了Python实现基于KNN算法的笔迹识别功能.分享给大家供大家参考,具体如下: 需要用到: Numpy库 Pandas库 手写识别数据 点击此处本站下载. 数据说明: 数据共有785列,第一列为label,剩下的784列数据存储的是灰度图像(0~255)的像素值 28*28=784 KNN(K近邻算法): 从训练集中找到和新数据最接近的K条记录,根据他们的主要分类来决定新数据的类型. 这里的主要分类,可以有不同的判别依据,比如"最多","最近邻",或者

随机推荐