第一步:取到豆瓣的登錄地址:

accounts.douban.com/log

用火狐瀏覽器打開,按F12打開調試器,F5刷新後。點開網路選項:

火狐F12調試器界面

可以看到第一個為登錄頁請求,第三個為驗證碼請求。查看第三個請求的參數和響應:

驗證碼請求參數

驗證碼圖片獲得

其中請求地址為:douban.com/misc/captcha?

請求方式為:GET

保存請求地址,等下會用到。

驗證碼有兩個參數:

id:bIIJv5WW5l5XWoy8XAabY0ka:en

size:s

試著從新刷新後參數改變,所以要獲得id這個參數才能取的驗證碼的圖片。複製id參數回到登錄請求頁原代碼,ctrl+F查找,果然找到如下結果:

同時也獲取了登錄表單提交的地址:action="https ://accounts.douban.com/log"

so:開整第二步,用爬蟲獲取驗證碼的ID,並調用函數獲取驗證圖片

def parse(self, response):
captcha_no = response.xpath(//input[@name="captcha-id"]/@value).extract_first()
# WwiHNP3kMmpKs6CkDTeTEfDN:en
# ySVwKvFAdD6NZiNXCegXCF37: en
# https: // www.douban.com / misc / captcha?id = lkxyg9TMwrzPrmwDUl3iNLnG:en & size = s
captcha_url = https://www.douban.com/misc/captcha?id=%s&size = s %captcha_no
yield scrapy.Request(url=captcha_url,method=GET,callback=self.do_captcha_before_login,headers=self.headers,meta={captcha_no:captcha_no})

第三步:輸入驗證碼,並設置formdata,提交表單並登錄

def do_captcha_before_login(self,response):
captcha_no = response.meta[captcha_no]
# print(response.body)
with open(captcha.gif,wb) as f:
f.write(response.body)
f.close()
try:
im = Image.open(captcha.gif)
im.show()
im.close()
except:
pass
#根據打開的圖片輸入驗證嗎
captchaStr = input(請輸入驗證碼:)
print(captchaStr)
login_url = https://accounts.douban.com/login
login_data={
source:index_nav,
redir:https://www.douban.com/,
form_email:[email protected],
form_password:############,
captcha-solution:captchaStr,
captcha-id:captcha_no,
login:登錄
}
yield scrapy.FormRequest(url=login_url,formdata=login_data,headers=self.headers,callback=self.parse_login_after)

第四步:登錄後:

def parse_login_after(self,response):
txlist = response.xpath(//*[@class="status-item"]/div/div[1]/div[2]/a/text()).extract()
for tx in txlist:
print(tx)

print(response.text)

可以找到自己的用戶暱稱

好了,本次登錄就到這裡了!


推薦閱讀:
相關文章