Scrapy爬蟲模擬登錄豆瓣
第一步:取到豆瓣的登錄地址:
https://accounts.douban.com/login?alias=1913788270%40qq.com&redir=https%3A%2F%2Fwww.douban.com%2F&source=index_nav&error=1016
用火狐瀏覽器打開,按F12打開調試器,F5刷新後。點開網路選項:
可以看到第一個為登錄頁請求,第三個為驗證碼請求。查看第三個請求的參數和響應:
其中請求地址為:https://www.douban.com/misc/captcha?id=bIIJv5WW5l5XWoy8XAabY0ka:en&size=s
請求方式為:GET
保存請求地址,等下會用到。
驗證碼有兩個參數:
id:bIIJv5WW5l5XWoy8XAabY0ka:en
size:s
試著從新刷新後參數改變,所以要獲得id這個參數才能取的驗證碼的圖片。複製id參數回到登錄請求頁原代碼,ctrl+F查找,果然找到如下結果:
同時也獲取了登錄表單提交的地址:action="https ://http://accounts.douban.com/login"
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:1913788270@qq.com,
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)
可以找到自己的用戶昵稱
好了,本次登錄就到這裡了!
推薦閱讀: