基于Python實(shí)現(xiàn)評(píng)論區(qū)抽獎(jiǎng)功能詳解
1. 分析評(píng)論接口
首先,我們需要找到評(píng)論數(shù)據(jù)的「接口」,也就是網(wǎng)站獲取評(píng)論數(shù)據(jù)的請(qǐng)求。
打開(kāi)一個(gè)需要抽獎(jiǎng)的文章,進(jìn)入「開(kāi)發(fā)者模式」(按F12 或 右鍵檢查),選中 Network 選項(xiàng),同時(shí)「刷新」文章頁(yè)面,使其重新發(fā)送請(qǐng)求,在右側(cè)工具欄中觀察頁(yè)面發(fā)送的請(qǐng)求,逐個(gè)分析請(qǐng)求,根據(jù)響應(yīng)內(nèi)容判斷出獲取評(píng)論的請(qǐng)求
在 Headers 欄中可以查看完整「請(qǐng)求」
https://blog.csdn.net/phoenix/web/v1/comment/list/121888905?page=1&size=3&commentId=
2. 獲取評(píng)論數(shù)據(jù)
有了接口以后,我們使用 requests 模塊發(fā)送請(qǐng)求,獲取評(píng)論的數(shù)據(jù)
注意請(qǐng)求中的兩個(gè)參數(shù): page 和 size
1.page 表示第幾頁(yè),此處傳 1 即可
2.size 表示每頁(yè)顯示幾條數(shù)據(jù),此處傳 100 (有幾條評(píng)論就寫(xiě)幾)
import requests # 評(píng)論請(qǐng)求連接 url = 'https://blog.csdn.net/phoenix/web/v1/comment/list/121888905?page=1&size=100&commentId=' # 請(qǐng)求頭 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" } # 獲取評(píng)論的請(qǐng)求數(shù)據(jù)(json字符串) page = requests.get(url, headers=header) print(page.text)
3. 篩選評(píng)論用戶
nickName 字段保存評(píng)論用戶名稱(chēng),我們將獲取到的數(shù)據(jù)根據(jù) ,分隔成數(shù)組,再篩選出包含 nickName 的數(shù)據(jù),即可獲取所有評(píng)論用戶的名稱(chēng),核心代碼如下
titles = page.text.split(',') # 獲取每一個(gè)字段 names = [] # 存放評(píng)論者名稱(chēng)的數(shù)組 for t in titles: # 獲取所有評(píng)論者字段 if 'nickName' in t and '"nickName":"士別三日wyx"' not in t: name = t[12:len(t)-1] # 截取評(píng)論者名稱(chēng) names.append(name) # 添加評(píng)論者名稱(chēng)至數(shù)組 print(names)
除了上面的方式外,也可使用正則表達(dá)式來(lái)匹配用戶的名稱(chēng),核心代碼如下
# 獲取所有評(píng)論者名稱(chēng) names = re.findall('nickName":"([^"]*)",', page.text) pond = [] # 獎(jiǎng)池 for name in names: if '士別三日wyx' not in name: pond.append(name) # 將參與者放入獎(jiǎng)池
4. 抽取幸運(yùn)觀眾
使用 random.choice 函數(shù)生成隨機(jī)用戶,作為幸運(yùn)觀眾,核心代碼如下
# 隨機(jī)生成幸運(yùn)觀眾 star = random.choice(pond) print('參與抽獎(jiǎng)人數(shù): %d' % len(pond)) print('幸運(yùn)觀眾:%s' % star)
5. 完整源碼
5.1 字符串截取的方式
使用「截取字符串」的方式篩選數(shù)據(jù),精確度較高,適用于絕大部分場(chǎng)景
import requests import random # 評(píng)論請(qǐng)求連接 url = 'https://blog.csdn.net/phoenix/web/v1/comment/list/121888905?page=1&size=100&commentId=' # 請(qǐng)求頭 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" } # 獲取評(píng)論的請(qǐng)求數(shù)據(jù)(json字符串) page = requests.get(url, headers=header) titles = page.text.split(',') # 獲取每一個(gè)字段 names = [] # 存放評(píng)論者名稱(chēng)的數(shù)組 for t in titles: # 獲取所有評(píng)論者字段 if 'nickName' in t and '"nickName":"士別三日wyx"' not in t: name = t[12:len(t)-1] # 截取評(píng)論者名稱(chēng) names.append(name) # 添加評(píng)論者名稱(chēng)至數(shù)組 # 隨機(jī)生成幸運(yùn)觀眾 star = random.choice(pond) print('參與抽獎(jiǎng)人數(shù): %d' % len(names)) print('幸運(yùn)觀眾:%s' % star)
5.2 正則匹配方式
使用「正則匹配」的方式篩選數(shù)據(jù),有一定誤差(用戶名中不能包含 " )
import requests import random import re # 評(píng)論請(qǐng)求連接 url = 'https://blog.csdn.net/phoenix/web/v1/comment/list/121888905?page=1&size=100&commentId=' # 請(qǐng)求頭 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" } # 獲取評(píng)論的請(qǐng)求數(shù)據(jù)(json字符串) page = requests.get(url, headers=header) # 獲取所有評(píng)論者名稱(chēng) names = re.findall('nickName":"([^"]*)",', page.text) pond = [] # 獎(jiǎng)池 for name in names: if '士別三日wyx' not in name: pond.append(name) # 將參與者放入獎(jiǎng)池 # 隨機(jī)生成幸運(yùn)觀眾 star = random.choice(pond) print('參與抽獎(jiǎng)人數(shù): %d' % len(pond)) print('幸運(yùn)觀眾:%s' % star)
5.3 執(zhí)行結(jié)果
測(cè)試結(jié)果1
E:\data\PrCharm\pythonProject\venv\Scripts\python.exe E:/data/PrCharm/pythonProject/award.py
參與抽獎(jiǎng)人數(shù): 15
幸運(yùn)觀眾:Willing 卡卡
Process finished with exit code 0
測(cè)試結(jié)果2?
E:\data\PrCharm\pythonProject\venv\Scripts\python.exe E:/data/PrCharm/pythonProject/award.py
參與抽獎(jiǎng)人數(shù): 15
幸運(yùn)觀眾:小輝_Super
Process finished with exit code 0
以上就是基于Python實(shí)現(xiàn)評(píng)論區(qū)抽獎(jiǎng)功能詳解的詳細(xì)內(nèi)容,更多關(guān)于Python評(píng)論區(qū)抽獎(jiǎng)功能的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
- python爬取豆瓣評(píng)論制作詞云代碼
- 用Python寫(xiě)腳本自動(dòng)評(píng)論再也不怕碰到噴子
- Python爬蟲(chóng)實(shí)戰(zhàn)之爬取攜程評(píng)論
- python 爬取華為應(yīng)用市場(chǎng)評(píng)論
- python 爬取京東指定商品評(píng)論并進(jìn)行情感分析
- python爬取晉江文學(xué)城小說(shuō)評(píng)論(情緒分析)
- 利用Python網(wǎng)絡(luò)爬蟲(chóng)爬取各大音樂(lè)評(píng)論的代碼
- python 爬取騰訊視頻評(píng)論的實(shí)現(xiàn)步驟
- Python?抖音評(píng)論數(shù)據(jù)抓取分析
相關(guān)文章
python檢測(cè)服務(wù)器端口代碼實(shí)例
這篇文章主要介紹了python檢測(cè)服務(wù)器端口代碼實(shí)例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-08-08Kali Linux安裝ipython2 和 ipython3的方法
今天小編就為大家分享一篇Kali Linux安裝ipython2 和 ipython3的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2019-07-07Python實(shí)現(xiàn)簡(jiǎn)單的索引排序與搜索功能
這篇文章主要介紹了Python實(shí)現(xiàn)簡(jiǎn)單的索引排序與搜索功能,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-04-04Python+Django在windows下的開(kāi)發(fā)環(huán)境配置圖解
Python+Django在windows下的開(kāi)發(fā)環(huán)境配置圖解教程,需要的朋友可以參考下。2009-11-11解決pycharm啟動(dòng)后總是不停的updating indices...indexing的問(wèn)題
今天小編就為大家分享一篇解決pycharm啟動(dòng)后總是不停的updating indices...indexing的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2019-11-11python實(shí)現(xiàn)堆排序的實(shí)例講解
在本篇文章里小編給大家分享的是一篇關(guān)于python實(shí)現(xiàn)堆排序的實(shí)例講解內(nèi)容,需要的朋友們可以學(xué)習(xí)參考下。2020-02-02基于Python實(shí)現(xiàn)視頻的人臉融合功能
這篇文章主要介紹了用Python快速實(shí)現(xiàn)視頻的人臉融合功能,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-06-06