评论区抽奖程序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. 上面版本回顾
- 使用使用爬虫基本知识解析网页
- 拿到评论区接口
- 经过测试必须要cookie
- 评论区接口为json格式文件
- 使用jsonpath提取评论用户
- 使用random模块随机从列表中选择一个人
- 主函数输出结果
缺点:
- 不够自动化
- 文章的评论接口需要自己手动粘贴
- 提示信息不够明显
- 一次只能抽取一位
3. 加点功能
- 提示输入评论区页数(下个版本改成自动)
- 提示输入文章ID
- 提示输入抽奖人数
4. 查看接口相似处
就拿我最近的两个文章作比较吧
- https://bxcblog.blog.csdn.net/article/details/121127815
- https://bxcblog.blog.csdn.net/article/details/121111567
再看看他们两个的接口:
- https://blog.csdn.net/phoenix/web/v1/comment/list/121127815?page=1&size=10&comment_id=
- 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. 注意事项
在你使用本程序的时候,你需要
- 配置Python环境
- 提取你的cookie
- 提取你的请求头
以上是关于评论区抽奖程序2.0的主要内容,如果未能解决你的问题,请参考以下文章
b站动态评论区抽奖 python版(已打包成exe,可以下载食用)