csdn一直是我比較討厭的網站之一,總感覺它是想寧可錯殺一千,絕不放過一個。爬蟲抓取,遠程登錄等等都設置了很多障礙。
csdn登錄的時候會發過來一個webflow號碼,登錄的時候需要一起發回去。這個其實很簡單,先對網站發送一個get請求,從返回來的頁面中抓到該號碼,然後返回去就可以了。
execution是什麼還不清楚,但是也是可以抓到的。先發送一個get請求。
self.request = requests.get(self.url, cookies=self.jar)
url就是csdn的登錄網址,jar是個空cookie。得到內容截取:
<input type="hidden" name="lt" value="LT-23849645-aEV2DOFVYC4xENCIetgAIyaKgT9Siq" />
<input type="hidden" name="execution" value="e4s1" />
<input type="hidden" name="_eventId" value="submit" />
<input class="logging" accesskey="l" value="登 錄" tabindex="5" type="button" />
發現name屬性是獨一無二的,直接抓取出來就可以了。
self.webflow = self.parse.xpath('//input[@name="lt"]/@value')
self.execution = self.parse.xpath('//input[@name="execution"]/@value')
然後把這兩個字段添加到字典中去:
self.pwd["lt"] = self.webflow[0]
self.pwd["execution"] = self.execution[0]
然後就一起發出去就可以了。
self.request = requests.post(self.url, headers=self.header, cookies=self.request.cookies, data=self.pwd)
現在就已經可以登錄csdn了。
源代碼:https://github.com/gt11799/login_with_webflow
————————————————————
github主頁:https://github.com/gt11799
E-mail:[email protected]