用接口登录拉勾网

前段时间一直忙于公司项目的测试工作导致一周多没有撸代码,所以今天通过悠悠是博客学习了一下如何让用接口登录拉勾网

下面介绍一下吧!分享下经验以及心得,,虽然我知道也没什么人会看!


首先呢要先登录拉钩网的网站:https://www.lagou.com/

登录后用fiddler抓包查看如下:


当再登陆一次时发现每次登陆的头部有一个code和token是随机变化的,如图箭头所示,那么就要找到这两个参数是如何产生的了。通过查看登录页面的前端代码发现如下图所示的这段注释暴露了,哈哈哈


下面就要通过beautifulsoup来抓取前段页面的这两个参数啦


直接上代码,注释部分我已经解释的很清楚啦!

通过前端抓取过这两个参数后就开始用接口去登录吧:


整体代码如下!::

#coding:utf-8
import requests,hashlib
import re
from bs4 import BeautifulSoup
import urllib3
urllib3.disable_warnings()

class Lagou(object):
    def __init__(self,s):
        self.s = s
    def get_token(self):
        '''
        </script>

        <!-- 页面样式 -->    <!-- 动态token,防御伪造请求,重复提交 -->
        <script>
        window.X_Anti_Forge_Token = '286fd3ae-ef82-4019-89c4-9408947a0e26';
        window.X_Anti_Forge_Code = '74603111';
        </script>
        '''
        url = 'https://passport.lagou.com/login/login.html'
        header = {
            "User-Agent": "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.99 Safari/537.36"
        }
        self.s.headers.update(header)
        data = self.s.get(url,headers = header)
        soup = BeautifulSoup(data.content,'html.parser',from_encoding='utf-8')
        token_code = {}
        try:
            #先找到第2个script节点
            t = soup.find_all('script')[1].get_text()
            #print(t)
            #再用正则取key
            token_code['X_Anti_Forge_Token'] = re.findall(r"Token = '(.+?)'", t)[0]
            token_code['X_Anti_Forge_Code'] = re.findall(r"Code = '(.+?)'", t)[0]
            return token_code
        except Exception as e:
            print('获取token等信息失败')
            token_code['X_Anti_Forge_Token'] =''
            token_code['X_Anti_Forge_Code'] = ''
        #print(token_code)
            return token_code
    '''
    def encryptPwd(self,passwd):
        # 对密码进行了md5双重加密
        passwd = hashlib.md5(passwd.encode('utf-8')).hexdigest()
        # veennike 这个值是在js文件找到的一个写死的值
        passwd = 'veenike'+passwd+'veenike'
        passwd = hashlib.md5(passwd.encode('utf-8')).hexdigest()
        return passwd
    '''

    def login(self,user,password):
        '''
        function:登录拉勾网网站
        :param s:  传s = requests.session()
        :param gtoken: 上一函数getTokenCode返回的tokenCode
        :param user: 账号
        :param psw: 密码
        :return: 返回json
        '''
        gtoken = self.get_token()
        url = 'https://passport.lagou.com/login/login.json'
        h = {
            "User-Agent": "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.99 Safari/537.36",
            "Content-Type": "application/x-www-form-urlencoded; charset=UTF-8",
            "X-Requested-With": "XMLHttpRequest",
            "X-Anit-Forge-Token": gtoken['X_Anti_Forge_Token'],  #取上个方法的返回值
            "X-Anit-Forge-Code": gtoken['X_Anti_Forge_Code'],
            "Referer": "https://passport.lagou.com/login/login.html",
        }
        self.s.headers.update(h) #更新头部
        d = {
            "isValidate":'true',
            "username": user,
            "password": password,
            "request_form_verifyCode": "",
            "submit": ""
                }
        r2 = self.s.post(url,headers = h,data=d,verify=False)
        #print(r2.text)
        print(r2.json())

if __name__=='__main__':
    s = requests.session()
    la = Lagou(s)
    la.login('xxxxx','xxxxxxx')
其实通过fiddler也能看出来密码是被加密过的,具体加密方式我不知道,但是网上说是通过md5加密后再次加盐后用md5加密
这里我就不说了,你直接复制你的加密后的密码就行了!
写的比较简单,有不懂的可以qq问我 970185127



猜你喜欢

转载自blog.csdn.net/xgh1951/article/details/80994842