python 爬取淘宝第一弹(淘宝登录)
前言
2018年7月份,當(dāng)時(shí)我正在學(xué)習(xí)爬蟲,看過一個(gè)教程視頻是用selenium爬取淘寶,當(dāng)時(shí)因?yàn)榉N種原因(當(dāng)然還是因?yàn)樽约禾玪an)沒有去寫,但當(dāng)11月份想找工作時(shí),想找一個(gè)爬蟲練手,能夠?qū)懮虾?jiǎn)歷充當(dāng)項(xiàng)目,當(dāng)我在去看視頻的時(shí)候?qū)W習(xí)的時(shí)候,當(dāng)時(shí)自信滿滿的寫完代碼,竟然沒有登錄不能進(jìn)行搜索!!!好吧那我就做一個(gè)滑塊功能吧,寫完了代碼,不知道為何劃過去不好使,但是我自己手動(dòng)滑動(dòng)滑塊完全ok,當(dāng)時(shí)就蒙了,由于當(dāng)時(shí)是淘寶剛剛更新,網(wǎng)上并沒有教程,無奈之下只能轉(zhuǎn)戰(zhàn)某東。
時(shí)隔一年,我又回來啦,現(xiàn)在的淘寶爬取商品,都是收費(fèi)的,網(wǎng)上我看了一眼并沒有看到能夠真正爬取淘寶的教程,所以我在看到一個(gè)大佬的教程之后,想著記錄一下,并且期待有緣人,能夠共同探討共同進(jìn)步。話不多說馬上開始。
淘寶會(huì)有很多登陸的流程,我也是一頭蒙,看了大佬的講解之后才有點(diǎn)明白,在此記錄一下。
首先在你打開淘寶鼠標(biāo)點(diǎn)擊用戶名那欄的時(shí)候,淘寶會(huì)出現(xiàn)一個(gè)post請(qǐng)求驗(yàn)證,用來是否驗(yàn)證出現(xiàn)滑塊,然后在你輸入密碼的時(shí)候,瀏覽器向淘寶發(fā)起一個(gè)post請(qǐng)求,驗(yàn)證用戶名密碼是否正確,如果正確就會(huì)返回一個(gè)token信息,再然后呢瀏覽器會(huì)拿著token去“alibaba.com“交換st信息,最后拿到st后獲取到cookie登錄成功。
首先我們看一下登錄頁面
可以看到的是在輸入賬號(hào)的時(shí)候?yàn)g覽器就會(huì)發(fā)起一個(gè)post請(qǐng)求,來驗(yàn)證是否需要出現(xiàn)滑塊驗(yàn)證碼,如果返回true,滑塊驗(yàn)證碼出現(xiàn),不過一搬的時(shí)候不會(huì)出現(xiàn)。
圖上可以看到有兩個(gè)參數(shù) ua 和 username
我們可以去開始編寫代碼了
接下來驗(yàn)證用戶名密碼
找到login這個(gè)從里面將headers和form信息拿下來,然后去請(qǐng)求token
接下來就是去獲取st碼然后去獲取登錄鏈接,具體st是什么在這里不過多解釋(具體我也不是很懂,看大佬文章了解到)但是st碼是單點(diǎn)登錄碼,想了解的同學(xué)可以去問度娘。
獲取到登錄鏈接,就可以登錄成功。
下面是完整代碼,本代碼只做學(xué)習(xí)用途,不得商用。
import requests import re import os import json s=requests.Session()class Taobaologin:def __init__(self,username,ua,pasword):#用來檢測(cè)是否需要驗(yàn)證碼的urlself.yanzhengma_url='https://login.taobao.com/member/requestyanzhengma_.do?_input_charset=utf-8'# 用來驗(yàn)證淘寶用戶名密碼的urlself.yanzheng_password_url = "https://login.taobao.com/member/login.jhtml"# 訪問st碼的urlself.st_href='https://login.taobao.com/member/vst.htm?st={}'self.username=usernameself.ua=uaself.pasword=paswordself.timeout=9def yanzhengma_(self):"""檢測(cè)賬號(hào)是否需要驗(yàn)證碼:param self::return:"""data={'username':self.username,'ua':self.ua}try:resp=s.post(self.yanzhengma_url,data=data,timeout=self.timeout)except Exception as e:print("檢測(cè)是否需要驗(yàn)證碼請(qǐng)求失敗的原因:{}".format(e))return Trueneedcode=resp.json()['needcode']print('是否需要滑塊驗(yàn)證:%s'%' 是'if needcode else '否')return needcodedef password_(self):verify_password_headers={'connection':'keep-alive','cache-control': 'max-age=0','origin': 'https://login.taobao.com','upgrade-insecure-requests': '1','user-agent': 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/76.0.3809.100 Safari/537.36','content-type': 'application/x-www-form-urlencoded','referer': 'https://login.taobao.com/member/login.jhtml?redirectURL=https%3A%2F%2Fwww.taobao.com%2F',}#登錄淘寶提交的數(shù)據(jù),登錄失敗,可重新復(fù)制form dataverify_password_data={'TPL_username': self.username,'ncoToken': 'b092c9650a75f3fd9d66cf71a56e3b04fc9415fc','slideCodeShow': 'false','useMobile': 'false','lang': 'zh_CN','loginsite': 0,'newlogin': 0,'TPL_redirect_url': ' https://www.taobao.com/','from': 'tbTop','fc': ' default','style': 'default','keyLogin': 'false','qrLogin': 'true','newMini': 'false','newMini2': 'false','loginType': '3','gvfdcname': '10','gvfdcre': '68747470733A2F2F7777772E74616F62616F2E636F6D2F','TPL_password_2': self.pasword,'loginASR': '1','loginASRSuc': '1','oslanguage': ' zh-CN','sr': '1920*1080','osVer': 'windows|6.1','naviVer': 'chrome|76.038091','osACN': 'Mozilla','osAV': '5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/76.0.3809.100 Safari/537.36','osPF': 'Win32','appkey': '00000000','mobileLoginLink': 'https://login.taobao.com/member/login.jhtml?spm=a21bo.2017.754894437.1.5af911d9dyqqjX&f=top&redirectURL=https://www.taobao.com/&useMobile=true','um_token': 'TDD8618838C054AB415A3B467C0F42E64B5076050F52B00A1E1A598C36F','ua': self.ua}try:response = s.post(self.yanzheng_password_url, headers=verify_password_headers, data=verify_password_data,timeout=self.timeout)response.raise_for_status()# 從返回的頁面中提取申請(qǐng)st碼地址except Exception as e:print('驗(yàn)證用戶名和密碼請(qǐng)求失敗,原因:')raise e# 提取申請(qǐng)st碼urlapply_st_url_match = re.search(r'<script src="(.*?)"></script>', response.text)# 存在則返回if apply_st_url_match:print('驗(yàn)證用戶名密碼成功,st碼申請(qǐng)地址:{}'.format(apply_st_url_match.group(1)))return apply_st_url_match.group(1)else:raise RuntimeError('用戶名密碼驗(yàn)證失敗!response:{}'.format(response.text))def _apply_st(self):"""申請(qǐng)st碼:return:st碼:return:"""apply_st_url=self.password_()try:st_resp=s.get(apply_st_url)except Exception as e:print("申請(qǐng)st碼請(qǐng)求失敗,原因")raise est_match=re.search(r'"data":{"st":"(.*?)"}',st_resp.text)if st_match:print('獲取st碼成功,st碼:{}'.format(st_match.group(1)))return st_match.group(1)else:raise RuntimeError("獲取st碼失敗! ")def login(self):"""使用st碼登錄:return:"""self.yanzhengma_()st = self._apply_st()headers={'Host': 'login.taobao.com','Connection': 'Keep-Alive','User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36'}try:response = s.get(self.st_href.format(st), headers=headers)response.raise_for_status()except Exception as e:print('st碼登錄請(qǐng)求,原因:')raise e# 登錄成功,提取跳轉(zhuǎn)淘寶主頁鏈接my_taobao_match = re.search(r'top.location.href = "(.*?)"', response.text)if my_taobao_match:print('登錄淘寶成功,跳轉(zhuǎn)鏈接:{}'.format(my_taobao_match.group(1)))return my_taobao_match.group(1)else:raise RuntimeError('登錄失敗!response:{}'.format(response.text))if __name__ == '__main__':# 淘寶用戶名username = ''ua = '121#sQylk/WnoWwlVlhpxVH0llXYecEfKujV9lbiqG/5oO74L2huFID5lwLYAcFfKujVllgm+aVGT2cvA3rnE9jIlwXYLa+xNvo9lGuYZ7pIKM9STQrJEmD5lwLYAcfdK5jVVmgY+zP5KMlVA3rnEkD5bwLYOcMYtutT0MQVBIbvsbc9MtFPD0rOa3VbbZ3glWfopCibkZ0T83Smbgi0CeIAFt7j+q9JnjxSpqLbCZeTM35O3piDkeHXmo60bZienqC9pCibCZ0T83BhbZs0keHaF9FbbZsbnjxSpXsbMqAT8dBLbgi0CvIPC9pIl/E0lnhdRtsbC6748u/milwAzvnyt5c5/FL2qSj+WB3OxUrYwyvUXKqnn/Tr9OKbQAvinzq3lEA9IZqAhMo0ayFsVOKKljj89RH9lJnkMjcZitjb8u+jB/Vg6oF41AWjD10S1PIxWStDOPtWfU0dRXLsCBIEWulD47txhxCh6CgY/JrDRsB9AKdPGv9qIbW7vuH1/VL0YmNvE3m6D6gh4288XuQ/PAuGRVJsmjZ16LV6ah9aUqZS2lA78FleH0bEIW8rdoaHTgLpouJ3xaA/3NApoLrQu4eR3UBDhcSRg65ffeCMJQAF15pNbuZEv4PosB7P7P30cWb+jIKIxVq1YGVM94pio7ZrVXNBZ6GXsOBPWThzAWwzMyPnWylXpsF990cqFT9riyOJpcEZtugpcexwIFoZKVVPYZHcBI/i4KxLlFF8o1Ps0cgkITdEjLx4RFyhS+S4cwAWRp7ycdJY4rDqBx+/L/rKeiF+M+o+D2bFwwaPE2FctGrk9d+j+L3jqtdif64Q/Gts1M/0ULi6whLBI1MBJTNWT4PhlMxvAR5KDFX5dPxlK6mX8NmwxVuDBXvswizvIAMzzUaz+yWKigITawfjWcWebLMa2QnIFmCraOzQkFM5bWe3mFLdxT2sMkoF9SK5eMOuv+bXCJd4jcG4TxHgN55dzdNS2YLVIn8/Q+Fu3ggrTaeojGf3ms7WaJjWi1hWJCuOKYcaknkJPrEVfjXpswX6iFmW5ZEaurIohzxddb+NxD5mFQzf/b6ZtIRypdzxzS0MFUL0yXThW6MSwTLDDJyCFkfxxUdT4r6uUW9XL1si5CEKMBX5AJGH00rZc3t='pasword = '403f4b8f8b9bce8d014bc030d87928a6937248fa3e604e2101dc546e24955d89142f8f223f313da3541c1d93d5f2797dc85feedd273c7063f1faf3e01e8216c12d805b09d278a78e2463038cf7a380402c4cf7d021d737bb776a25f7269c76bb31c08b8650dc6a025182ccc66e7d4e6bf63744eae82c1a57bb9ebe62dde21f37'ul = Taobaologin(username, ua, pasword)歡迎同學(xué)們交流,討論,請(qǐng)大家繼續(xù)關(guān)注接下來會(huì)出淘寶爬蟲系列文章。請(qǐng)幫忙點(diǎn)點(diǎn)關(guān)注。謝謝大家,有不會(huì)的請(qǐng)?jiān)谠u(píng)論下方留言。有不對(duì)的地方歡迎大佬指教。
總結(jié)
以上是生活随笔為你收集整理的python 爬取淘宝第一弹(淘宝登录)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: mac配置iOS开发环境
- 下一篇: Python——图片与视频互转(亲测有效