爬蟲筆記之零度代理(token)
阿新 • • 發佈:2020-11-25
難度: ☆☆☆☆☆ 0星
一、目標
這個連結是一個代理列表:
http://3bodyhome.com/proxy
正常的來講應該是有資料的,但是不知道為啥這裡沒有,可能是掛了,不過這個不是重點,開啟開發者工具,看下Network裡有個介面:
http://3bodyhome.com/proxy?page=2&num=15&token=f02e62aaa6e563cc606d65ca0e7cf9b5&t=1605278006
這個就是獲取代理列表的,它的引數如下:
本次要搞定的就是token引數。
二、分析
先對那個介面打個xhr斷點:
因為是ajax的介面嗎,所以猜測單擊“下一頁”的按鈕時是會發出翻頁請求的,所以加完斷點不必重新整理頁面,直接單擊“下一頁”按鈕即可進入斷點,然後格式化程式碼:
在呼叫棧上單擊前面的棧幀回溯,找引數是在哪裡生成的,其實也不用每個棧幀都看,圈出來的那個棧幀很明顯就是發請求的地方:
定位到這個棧幀之後,直接就找到生成請求url的地方了,框起來的部分就是生成邏輯。
page就是要看第幾頁,num就是一頁有多少條,timestamp就是10位的時間戳,token就是md5(page + num + timestamp),接下來就是編碼實現了。
三、編碼實現
這個介面已經掛掉了,雖然不知道編碼實現還有啥意義,但還是搞一下,畢竟儀式感很重要...
#!/usr/bin/env python3 # encoding: utf-8 """ @author: CC11001100 """ import hashlib import time import requests def crawl(page, num=15): # 需要先訪問doc拿到一個cookie session = requests.session() url = "http://3bodyhome.com/proxy" r = session.get(url) print(f"拿到了cookie{r.cookies}") # 然後再訪問接口才能拿到正確的響應 # 沒有cookie訪問介面會返回: # {"msg": "emmm...", "status": false} ts = int(time.time()) token = hashlib.md5(f"{page}{num}{ts}".encode("UTF-8")).hexdigest() url = f"http://3bodyhome.com/proxy?page={page}&num={num}&token={token}&t={ts}" print(url) return session.get(url).text if __name__ == "__main__": print(crawl(1)) # {"status": "true", "list": "OUhcUg=="}
倉庫:
請注意爬蟲文章具有時效性,本文寫於2020-11-13日。