更新 2016/8/9:最近發現目標網站已經屏蔽了這個登入簽到的介面(PS:不過我還是用這個方式賺到了將近一萬點積分·····)
前幾天女朋友跟我說,她在一個素材網站上下載東西,積分總是不夠用,積分是怎麼來的呢,是每天登入網站簽到獲得的,當然也能購買,她不想去買,因為偶爾才會用一次,但是每到用的時候就發現積分不夠,又記不得每天去簽到,所以就有了這個糾結的事情。怎麼辦呢,想辦法唄,於是我就用python寫了個小爬蟲,每天去自動幫她簽到掙積分。廢話不多說,下面就講講代碼。
我這裡用的是python3.4,使用python2.x的朋友如果有需要請繞道查看別的文章。
工具:Fiddler
首先下載安裝Fiddler,這個工具是用來監聽網路請求,有助於你分析請求連結和參數。
開啟目標網站:http://www.17sucai.com/,然後點擊登入
好了,先別急著登入,開啟你的Fiddler,此時Fiddler裡面是沒有監聽到網路請求的,然後回到頁面,輸入郵箱和密碼,點擊登入,下面再到fiddler裡面去看
這裡面的第一個請求就是你點擊登入的網路請求,點擊這個連結可以在右邊看到你的一些請求資訊
然後點擊WebForms可以看到你的請求參數,也就是使用者名稱和密碼
下面我們有代碼來實現登入功能
import urllib.requestimport urllibimport gzipimport http.cookiejar#定義一個方法用於產生要求標頭資訊,處理cookiedef getOpener(head): # deal with the Cookies <pre name="code" class="python"> cj = http.cookiejar.CookieJar() pro = urllib.request.HTTPCookieProcessor(cj) opener = urllib.request.build_opener(pro) header = [] for key, value in head.items(): elem = (key, value) header.append(elem) opener.addheaders = header return opener#定義一個方法來解壓返回資訊def ungzip(data): try: # 嘗試解壓 print('正在解壓.....') data = gzip.decompress(data) print('解壓完畢!') except: print('未經壓縮, 無需解壓') return data#封裝頭資訊,偽裝成瀏覽器header = { 'Connection': 'Keep-Alive', 'Accept-Language': 'zh-CN,zh;q=0.8', 'Accept': 'application/json, text/javascript, */*; q=0.01', 'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.101 Safari/537.36', 'Accept-Encoding': 'gzip, deflate', 'X-Requested-With': 'XMLHttpRequest', 'Host': 'www.17sucai.com',}url = 'http://www.17sucai.com/auth'opener = getOpener(header)id = 'xxxxxxxxxxxxx'#你的使用者名稱password = 'xxxxxxx'#你的密碼postDict = { 'email': id, 'password': password,}postData = urllib.parse.urlencode(postDict).encode()op = opener.open(url, postData)data = op.read()data = ungzip(data)print(data)
好了,接下來清空一下你的Fiddler,然後運行這個程式,看一下你的Fiddler
你可以點擊這個連結,看看右邊的請求資訊和你用瀏覽器請求的是不是一樣
下面是程式後代列印的資訊
code=200表示登陸成功
解析來就需要擷取到簽到的url,這裡你需要一個沒有簽到的帳號在網站中點擊簽到按鈕,然後通過Fiddler來擷取到簽到的連結和需要的資訊。
然後點擊“簽到”,簽到成功後到Fiddler中查看捕捉到的url
點擊這個url可以在右邊查看訪問這個連結時所需要的頭資訊和cookies神馬的,我們已經登入成功後直接使用cookies就行了,python對cookies的處理做好了封裝,下面是My Code中對cookies的使用
cj = http.cookiejar.CookieJar() pro = urllib.request.HTTPCookieProcessor(cj) opener = urllib.request.build_opener(pro)
下面是簽到成功返回的資訊:code=200表示請求成功,day=1表示連續簽到一天,score=20表示獲得的積分數
下面放出完整代碼,當然,為了測試代碼簽到,你還需要你一沒有簽到過的帳號
import urllib.requestimport urllibimport gzipimport http.cookiejardef getOpener(head): # deal with the Cookies cj = http.cookiejar.CookieJar() pro = urllib.request.HTTPCookieProcessor(cj) opener = urllib.request.build_opener(pro) header = [] for key, value in head.items(): elem = (key, value) header.append(elem) opener.addheaders = header return openerdef ungzip(data): try: # 嘗試解壓 print('正在解壓.....') data = gzip.decompress(data) print('解壓完畢!') except: print('未經壓縮, 無需解壓') return dataheader = { 'Connection': 'Keep-Alive', 'Accept-Language': 'zh-CN,zh;q=0.8', 'Accept': 'application/json, text/javascript, */*; q=0.01', 'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.101 Safari/537.36', 'Accept-Encoding': 'gzip, deflate', 'X-Requested-With': 'XMLHttpRequest', 'Host': 'www.17sucai.com',}url = 'http://www.17sucai.com/auth'opener = getOpener(header)id = 'xxxxxxx'password = 'xxxxxxx'postDict = { 'email': id, 'password': password,}postData = urllib.parse.urlencode(postDict).encode()op = opener.open(url, postData)data = op.read()data = ungzip(data)print(data)url = 'http://www.17sucai.com/member/signin' #簽到的地址op = opener.open(url)data = op.read()data = ungzip(data)print(data)
相比登入,簽到也就是在登入完成後重新開啟一個連結而已,由於我的帳號都已經簽到過了,這裡就不在貼運行代碼的圖 了。
接下來要做的就是在你電腦上寫個bat 指令碼,再在“任務計劃”中添加一個定時任務就行了。
在此之前你還需要配置一下python的環境變數,這裡就不在贅述了。