首先,我要爬的是這個網站:http://www.66ip.cn/nm.html,我想做個直接調用網站的接口獲取代理的爬蟲
這個接口看上去似乎很簡單,直接輸入需要的代理條件后,點擊提取即可
點擊提取后就是一個個ip了,
廢話不多說,按f12點開,
發現需要兩個cookie值,不知道從哪來,刪掉cookie后,刷新頁面再看看。
同樣有這兩個cookie,不過是新值,並且出了jquery.js沒別的文件了。奇怪了,cookie怎么出來的,不過可以注意到被重定向了。
所以,把f12的net work下的 preserve log 勾選(新手才學到的),這樣就可以看到所有的包了
三、
果然找到一個cookie,但是還有一個cookie值呢?查看這個521報文看不到內容,使用postman試試(這里一定要注意,今天被坑了很久,postman是依托於chrome的,chrome出於安全考慮,限制了postman的cookie功能,需要下載插件,點擊一下會跳轉到谷歌應用商店postman interceptor,然后在postman中打開改插件即可。還有要注意的是,chrome上的cookie,是會被postman使用的,記得刪掉。下圖的postman interceptor點開了)
四,然后發現果然執行了一段js代碼,拿去格式化,簡單修改,使用nodejs運行了一下,其實就是一句,document.cookies='***'的代碼
五,這個還算好做,分離出來就行,然后發現,誒,每次沒cookie的請求都是不同的js代碼,干脆就提取出js代碼,然后,替換部分js代碼, 即可獲取_ydclearance
@staticmethod def get_66ip_cookies(url): """ 66ip的加密cookie破解 :param self: :param url: :return: """ headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko)' ' Chrome/68.0.3440.106 Safari/537.36'} res = requests.get(url, headers=headers) yd_cookie = res.cookies['yd_cookie'] groups = re.search('<script language="javascript"> window.onload=setTimeout\("(.*?)", 200\); (.*?)</script>', res.text) x = groups.group(1) y = groups.group(2) y = y.replace('eval("qo=eval;qo(po);");', 'result = /_ydclearance=(.*?);/.exec(po)[1]; return result;') jsfunc = execjs.compile(y) _ydclearance = jsfunc.call(x[:2], re.findall('[0-9]+', x)[0]) return yd_cookie, _ydclearance