python利用requests库模拟登录,过程解析

之前尝试用requests直接请求登录失败了,都是直接用selenium简单粗暴的登录。今天看了看大佬《网络爬虫开发实战》模拟登录部分,又收获不少。

利用requests模拟登陆的关键:

第一:是要找到相应的请求地址

第二:找到要请求头中对应的提交表单Form Data的各种字段,以及他们的值

第一步:是要找到相应的请求地址

拿豆瓣为例,在登录界面时别输入用户名密码或者输入错误的用户名密码,然后点击登录,然后在网络请求中找到相应的登录地址

network中这么多地址怎么分辨哪个是咱们想要的请求,我的技巧就是看哪个请求中带Form Data,如下图:

下图的basic对应的request url:https://accounts.douban.com/j/mobile/login/basic

就是我们想要的请求地址了

第二步: 找到要请求头中对应的提交表单Form Data的各种字段,以及他们的值

还看这张图:

一共有五个字段:

ck:含义未知,填空字符串

name:用户名

password:登录密码

remember:是否记录密码,true or flase都行

ticket:含义未知,填空字符


 两个关键步骤搞定了,可以上代码了

import requests
from lxml import etree


class DouLogin(object):
    def __init__(self):
        self.headers = {
            'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.97 Safari/537.36'}
        self.login_url = 'https://accounts.douban.com/j/mobile/login/basic'
        self.logined_url = 'https://www.douban.com/'
        self.session = requests.Session()

    def login(self, email, password):
        post_data = {
            'ck': '',  # 可选
            'name': email,
            'password': password,
            'ticket': '',  # 可选

        }
        response = self.session.post(self.login_url, data=post_data, headers=self.headers)
        if response.status_code == 200 and response.json().get('status') == 'success':
            response = self.session.get(self.logined_url)
            selector = etree.HTML(response.text)
            username = selector.xpath("//li[@class='nav-user-account']/a/span/text()")[0]
            print('登录成功:这是%s' % username)
        else:
            print('登录失败:%s' % response.json().get('description'))


if __name__ == "__main__":
    login = DouLogin()
    login.login(email='[email protected]', password='xxx')

登录成功输出结果:

登录成功:这是xxx的帐号

登录失败输出结果:

登录失败:需要图形验证码

ps:有时候可能会失败,因为要二次滑动验证,这个暂时处理

pps:尝试登陆github失败了,他的Form Data里面的字段比较多,估计是哪个没设置对,还是selenium大法简答粗暴

发布了115 篇原创文章 · 获赞 34 · 访问量 9万+

猜你喜欢

转载自blog.csdn.net/u011519550/article/details/103076848
今日推荐