代碼僅供技術人員進行學習和研究使用,請勿將其用于非法用途或以任何方式竊取第三方數據。使用該代碼產生的所有風險均由用戶自行承擔,作者不對用戶因使用該代碼而造成的任何損失或損害承擔任何責任。
加密參數
加密參數主要是cookie,其中只有三個cookie最重要,BAIDUID BAIDUID_BFESS 和一個ab開頭的cookie
cookie獲取
BAIDUID和BAIDUID_BFESS在訪問百度系的產品時會由服務器返回,可以通過訪問百度搜索引擎或者網站的首頁進行獲取,建議使用Session
ab開頭的cookie
這個ab開頭的cookie是綁定了你的UA的,所以不能用同一個cookie而使用不同的UA,UA和cookie和必須綁定
def get_cookie(self, baidu_id, user_agent):s = '{}AIA{}'.format(user_agent, baidu_id)m = hashlib.md5(s.encode())a = m.hexdigest()time_str = str(time.time()).replace('.', '')[:13]i = a + time_strJS1 = '''function a () { return "ab" + ("" + +new Date((new Date).getFullYear(),(new Date).getMonth(),(new Date).getDate(),(new Date).getHours())).substring(0, 9)}'''JS2 = '''function a (i) {s = [i[0], i[1], i.substring(2, i.length - 2), i[i.length - 2], i[i.length - 1]]o = s[0] + s[3] + s[2] + s[1] + s[4]return o}'''ctx1 = execjs.compile(JS1)ABname = ctx1.eval('a()')ctx2 = execjs.compile(JS2)ABvaule = ctx2.call('a', i)return {'BAIDUID': baidu_id,str(ABname): ABvaule,'BAIDUID_BFESS': baidu_id,}
通過這個cookie的生成邏輯可以看出他的值是由UA組成的 然后進行了MD5再進行了一些移位操作。
到現在網站需要的三個cookie已經全部拿到了
JA3指紋
到這里,其實代理IP的質量高一些,已經可以進行正常的采集,但是大多數情況下會出現采集一段時間后會瘋狂的出現302跳轉到旋轉滑塊,這是因為他檢測了我們的JA3指紋
JA3指紋繞過
關于JA3指紋繞過可以看一下我之前的文章
python JA3指紋繞過
最后的一些思路
1、可以為BAIDUID搭建一個cookie池
2、不知道BAIDUID是否在服務端綁定了IP,即便突破了JA3還是會出現一些驗證的情況