python -- 拉勾網爬蟲類比登入__python

來源:互聯網
上載者:User

入門爬蟲一段時間,最近在做一個拉勾網的資料爬蟲分析,項目也快接近尾聲了,於是抽個時間寫一下這個項目中遇到的一些問題。

目前拉勾網的反爬蟲機制還是可以的,一開始用scrapy shell 分析拉勾網,發現拉勾網要校正useragent,然後訪問不到幾次就會被重新導向到登入頁面,即拉勾網會校正cookie。

下面是類比登陸的思路:
拉勾網登入頁面: https://passport.lagou.com/login/login.html

抓包分析一下

可以分析出類比登陸需要的參數:
url = “https://passport.lagou.com/login/login.html”

postData = {
‘isValidate’ : ‘true’,
‘username’ : username,
‘password’: password,
‘request_form_verifyCode’: ”,
‘submit’: ”
}

HEADERS = {
‘Referer’: ‘https://passport.lagou.com/login/login.html‘,
‘User-Agent’: ”,
‘X-Requested-With’: ‘XMLHttpRequest’,
‘X-Anit-Forge-Token’: ”,
‘X-Anit-Forge-Code’, ”,
}

那麼如何去擷取X-Anit-Forge-Token、X-Anit-Forge-Code這兩個參數呢。
我們開啟F12認真看登入頁面的原始碼

可以在head標籤裡面可以找到這兩個值,只需要用正則去匹配出來就可以了。

那麼登入的密碼是怎麼加密的呢。
從源碼裡可以看出,登入頁面 載入的js並不多,那麼就一個一個找吧。
在 main.html_aio_f95e644.js (“https://img.lagou.com/passport/static/pkg/pc/page/login/main.html_aio_f95e644.js“)
這個js裡面發現了加密的方法:

首先對密碼進行一次md5加密:password = md5(password)
然後前後加上veenike這串字元: password = “veenike” + password + “veenike”
最後再次進行md5加密:password = md5(password)

那麼到這裡分析就差不多了,下面為類比登入的代碼

#!/usr/bin/env python# -*- coding:utf-8 -*-import requestsimport hashlibimport re#請求對象session = requests.session()#要求標頭資訊HEADERS = {    'Referer': 'https://passport.lagou.com/login/login.html',    'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10.12; rv:51.0) Gecko/20100101 Firefox/51.0',}def get_password(passwd):    '''這裡對密碼進行了md5雙重加密 veennike 這個值是在main.html_aio_f95e644.js檔案找到的 '''    passwd = hashlib.md5(passwd.encode('utf-8')).hexdigest()    passwd = 'veenike' + passwd + 'veenike'    passwd = hashlib.md5(passwd.encode('utf-8')).hexdigest()    return passwddef get_token():    Forge_Token = ""    Forge_Code = ""    login_page = 'https://passport.lagou.com/login/login.html'    data = session.get(login_page, headers=HEADERS)    match_obj = re.match(r'.*X_Anti_Forge_Token = \'(.*?)\';.*X_Anti_Forge_Code = \'(\d+?)\'', data.text, re.DOTALL)    if match_obj:        Forge_Token = match_obj.group(1)        Forge_Code = match_obj.group(2)    return Forge_Token, Forge_Codedef login(username, passwd):    X_Anti_Forge_Token, X_Anti_Forge_Code = get_token()    login_headers = HEADERS.copy()    login_headers.update({'X-Requested-With': 'XMLHttpRequest', 'X-Anit-Forge-Token': X_Anti_Forge_Token, 'X-Anit-Forge-Code': X_Anti_Forge_Code})    postData = {            'isValidate': 'true',            'username': username,            'password': get_password(passwd),            'request_form_verifyCode': '',            'submit': '',        }    response = session.post('https://passport.lagou.com/login/login.json', data=postData, headers=login_headers)    print(response.text)def get_cookies():    return requests.utils.dict_from_cookiejar(session.cookies)if __name__ == "__main__":    username = '1371XXXXXXX'    passwd = 'xxxxxxxxxx'    login(username, passwd)    print(get_cookies())

控制台結果

類比登入以後便能擷取到cookie,為爬蟲做準備。代碼拷貝就即能跑,不過拉勾網的登入校正隨時會改變,若發現登入失敗的可以在下面評論,我會抽空更新代碼。

github地址:https://github.com/laichilueng/lagou_login
喜歡的可以去點個贊,謝謝

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.