基於Python實現評論區抽獎功能詳解
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評論區抽獎功能的資料請關註WalkonNet其它相關文章!
推薦閱讀:
- 用Python采集《雪中悍刀行》彈幕做成詞雲實例
- Python爬蟲實現熱門電影信息采集
- Python如何生成隨機數及random隨機數模塊應用
- python 爬取豆瓣電影短評並利用wordcloud生成詞雲圖
- Python爬蟲之爬取二手房信息