09.17 遲到的爬蟲!

聽說懂得欣賞技術的人都已經關注了我們,你還在等什麼?

時間比較倉促,但百忙之中還是把文章寫出來了,原諒我的懶惰!!!如果有什麼不對的地方,還請大家指正!!!

大家都知道,啊呸,可能有人知道,在微信裡面有個小程序,叫做抽獎助手(免費打了一波小廣告是不是得讓我中一次啊,

F**k!)。我經常進去抽獎,雖然一次都沒有抽到過,但是,我畢竟也沒發過獎啊

。。。等公眾號稍微做得有點起色之後再嘗試發起抽獎吧。。。

遲到的爬蟲!

很顯然,在抽獎助手中的公共抽獎,參與抽獎是免費的,但是需要花時間,想抽獎就不得不每天打開小程序逐個點擊參與才能參與(我自己也經常忘記),每天重複的操作覺得好繁瑣,於是在某一天看到@劉志軍寫的文章後,發現可以用爬蟲去參與抽獎,但是感覺不是圈子裡的人是看不懂的。所以,參考了@劉志軍大大的文章的基本思路,加上我自己的理解,然後用比較容易理解的口吻和方式,重新寫了這樣一篇文章,來實現用爬蟲去自動參與抽獎。

準備事項

  1. 別的基本的廢話(什麼準備手機和電腦之類的)就不多說了,首先,你得現在電腦上安裝Python(推薦用python3.6.5的版本,請自行去社區下載安裝),特別注意要勾上Add Python 3.6 to PATH這個選項喲!
  2. 在你的電腦上安裝Fiddler,並學會使用,由於篇幅有限,並且不偏離主題,這裡不教大家使用,只是簡單介紹跟我們這次相關的知識,其他的請自行爬樓!!!
  3. 用 Python 來構建一個自動參與抽獎的腳本。
  4. 大致思路就是這樣子了,差不多了。。。
  5. 我也是菜鳥,別對我要求太多


Fiddler的工作原理

如何下載安裝就不多廢話了,如果你連這個都不會,那麼你就是連門都沒入,下面的內容也沒必要看了,這個和安裝遊戲也沒啥多大的區別!

什麼是Fiddler?

Fiddler是一個web調試代理。它能夠記錄所有客戶端和服務器間的http請求,允許你監視,設置斷點,甚至修改輸入輸出數據,fiddler包含了一個強大的基於事件腳本的子系統,並且能夠使用.net框架語言擴展。

原理?

Fiddler 作為系統代理,當啟用Fiddler 時,IE 的PROXY 設定會變成一個相對的數值,比如(127.0.0.1:8888)。所有的來自互聯網服務的HTTP 請求在到達目標Web 服務器之前都會經過Fiddler,同樣的,所有的HTTP 響應都會在返回客戶端瀏覽器之前經過Fiddler。

遲到的爬蟲!

看上圖,你就明白原理了,它以8888端口開本地代理服務器,並且支持https!另外,除了他具有一般web調試器的所有功能之外,其最最大的一個特點是可以中途修改http通信內容來達到調試的功能。

操作

在實際操作中,手機和電腦要在同一個局域網絡中!打開Fiddler軟件,界面和其他抓包軟件一樣,全英文

再次確保安裝Fiddler的電腦和你的手機在同一局域網內,因為Fiddler只是一個代理,需要將手機的代理指向PC機,不能互相訪問是不行的。

遲到的爬蟲!

先ping出自己的電腦的IP地址,打開控制檯,輸入ipconfig即可!

遲到的爬蟲!

然後打開Fiddler,選擇Tools>Options>Connections,勾選Allow remote computers to connect這個選項,然後確定。弄完之後一點要重啟Fiddler軟件!!!

遲到的爬蟲!

然後在手機端配置即可!代理選擇手動,主機名就是電腦的IP地址。具體的都視情況而定。

遲到的爬蟲!

然後就可以抓包了,先隨便抓一個看看,可以看到現在抓取的地址包:

遲到的爬蟲!

通過 Fiddler 抓包,我們看到抽獎列表的請求地址是:/public_lottery?page=1&size=5, 請求方法是 GET,還有一個 Header 字段 Authorization,返回的數據結構可以清晰看到總共返回了5條數據,代表5個獎品,每個字段基本能猜出來什麼意思。

遲到的爬蟲!

看背後它是怎麼向服務器發送請求的,弄清楚了原理之後就可以用程序來自動模擬請求。

用Python來實現

現在我們就可以用 Python 來構建一個自動參與抽獎的腳本,每隔一段時間就去自動刷,發現有新的獎品,就自動參與抽獎啦。(代碼感謝@劉志軍大佬寫出來,鼓掌)

源代碼

# coding=utf-8
import requests
def main():
url = "https://lucky.nocode.com/public_lottery?page=1&size=5"
# 替換成你自己的Authorization
headers = {
"Authorization": "Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXV...."}
res = requests.get(url, headers=headers)
lotteries = res.json().get("data")
join_url = "https://lucky.nocode.com/lottery/{id}/join"
for lottery in lotteries:
res = requests.post(join_url.format(id=lottery.get("id")), headers=headers)
data = res.json()
if res.status_code == 200 and 'errors' not in data:
print("成功參與抽獎:《%s》" % lottery.get("prizes").get("data")[0].get("name"))
if __name__ == '__main__':
main()


成功參與抽獎:《阿瑪尼紅管唇釉》
成功參與抽獎:《Havaianas 人字拖》
成功參與抽獎:《《不要成為無聊的大人》》
成功參與抽獎:《Satan 鑰匙扣》
成功參與抽獎:《桌面理線器》

運行後你就會發現,抽獎活動全部變成已參與了!

下面是@劉志軍大佬的原話:有人可能會問,這算不算作弊呢?我覺得這就是程序員的優勢,我們只是用了不一樣的工具來完成相同的事情,以後編程還真的是每個人都應該掌握的一項基本技能,沒事寫個代碼解決繁瑣的、重複的工作。懶惰是推動社會文明進步的原動力。

遲到的爬蟲!

想學Java&python|其它計算機語言的你,是否有過迷茫呢?沒關係,私信龍先森,讓龍先森對你一對一解答!

遲到的爬蟲!

『好了,本期就說到這,一期一篇,有精華有乾貨,有時也划水,還希望大家多多支持。如果你喜歡龍先森的文章,不妨點擊下關注,並分享至朋友圈!』

〖筆者注:若文本圖片有侵權,請聯繫作者刪除,或另行協商〗


*版權聲明:版權歸作者本人所有,尊重原創,推送文章除非無法確認,都會註明作者和來源。如果出處有誤或侵犯到原作者權益,實屬無心之舉,請務必與我聯繫刪除或授權事宜。


分享到:


相關文章: