日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

python 爬取淘宝第一弹(淘宝登录)

發布時間:2023/12/14 python 23 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python 爬取淘宝第一弹(淘宝登录) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

前言

2018年7月份,當時我正在學習爬蟲,看過一個教程視頻是用selenium爬取淘寶,當時因為種種原因(當然還是因為自己太lan)沒有去寫,但當11月份想找工作時,想找一個爬蟲練手,能夠寫上簡歷充當項目,當我在去看視頻的時候學習的時候,當時自信滿滿的寫完代碼,竟然沒有登錄不能進行搜索!!!好吧那我就做一個滑塊功能吧,寫完了代碼,不知道為何劃過去不好使,但是我自己手動滑動滑塊完全ok,當時就蒙了,由于當時是淘寶剛剛更新,網上并沒有教程,無奈之下只能轉戰某東。
時隔一年,我又回來啦,現在的淘寶爬取商品,都是收費的,網上我看了一眼并沒有看到能夠真正爬取淘寶的教程,所以我在看到一個大佬的教程之后,想著記錄一下,并且期待有緣人,能夠共同探討共同進步。話不多說馬上開始。

淘寶會有很多登陸的流程,我也是一頭蒙,看了大佬的講解之后才有點明白,在此記錄一下。

首先在你打開淘寶鼠標點擊用戶名那欄的時候,淘寶會出現一個post請求驗證,用來是否驗證出現滑塊,然后在你輸入密碼的時候,瀏覽器向淘寶發起一個post請求,驗證用戶名密碼是否正確,如果正確就會返回一個token信息,再然后呢瀏覽器會拿著token去“alibaba.com“交換st信息,最后拿到st后獲取到cookie登錄成功。

首先我們看一下登錄頁面

可以看到的是在輸入賬號的時候瀏覽器就會發起一個post請求,來驗證是否需要出現滑塊驗證碼,如果返回true,滑塊驗證碼出現,不過一搬的時候不會出現。
圖上可以看到有兩個參數 ua 和 username
我們可以去開始編寫代碼了


接下來驗證用戶名密碼


找到login這個從里面將headers和form信息拿下來,然后去請求token

def 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',}#登錄淘寶提交的數據,登錄失敗,可重新復制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()# 從返回的頁面中提取申請st碼地址except Exception as e:print('密碼請求失敗:')raise e# 提取申請st碼urlapply_st_url_match = re.search(r'<script src="(.*?)"></script>', response.text)# 存在則返回if apply_st_url_match:print('st碼:{}'.format(apply_st_url_match.group(1)))return apply_st_url_match.group(1)else:raise RuntimeError('用戶名密碼驗證失敗:{}'.format(response.text))

接下來就是去獲取st碼然后去獲取登錄鏈接,具體st是什么在這里不過多解釋(具體我也不是很懂,看大佬文章了解到)但是st碼是單點登錄碼,想了解的同學可以去問度娘。

獲取到登錄鏈接,就可以登錄成功。

下面是完整代碼,本代碼只做學習用途,不得商用。

import requests import re import os import json s=requests.Session()class Taobaologin:def __init__(self,username,ua,pasword):#用來檢測是否需要驗證碼的urlself.yanzhengma_url='https://login.taobao.com/member/requestyanzhengma_.do?_input_charset=utf-8'# 用來驗證淘寶用戶名密碼的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):"""檢測賬號是否需要驗證碼: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("檢測是否需要驗證碼請求失敗的原因:{}".format(e))return Trueneedcode=resp.json()['needcode']print('是否需要滑塊驗證:%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',}#登錄淘寶提交的數據,登錄失敗,可重新復制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()# 從返回的頁面中提取申請st碼地址except Exception as e:print('驗證用戶名和密碼請求失敗,原因:')raise e# 提取申請st碼urlapply_st_url_match = re.search(r'<script src="(.*?)"></script>', response.text)# 存在則返回if apply_st_url_match:print('驗證用戶名密碼成功,st碼申請地址:{}'.format(apply_st_url_match.group(1)))return apply_st_url_match.group(1)else:raise RuntimeError('用戶名密碼驗證失敗!response:{}'.format(response.text))def _apply_st(self):"""申請st碼:return:st碼:return:"""apply_st_url=self.password_()try:st_resp=s.get(apply_st_url)except Exception as e:print("申請st碼請求失敗,原因")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碼登錄請求,原因:')raise e# 登錄成功,提取跳轉淘寶主頁鏈接my_taobao_match = re.search(r'top.location.href = "(.*?)"', response.text)if my_taobao_match:print('登錄淘寶成功,跳轉鏈接:{}'.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)

歡迎同學們交流,討論,請大家繼續關注接下來會出淘寶爬蟲系列文章。請幫忙點點關注。謝謝大家,有不會的請在評論下方留言。有不對的地方歡迎大佬指教。

總結

以上是生活随笔為你收集整理的python 爬取淘宝第一弹(淘宝登录)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。