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

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)

可以找到自己的用户昵称

好了,本次登录就到这里了!


推荐阅读:
相关文章