亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

python實現(xiàn)二維碼掃碼自動登錄淘寶

 更新時間:2016年12月27日 08:41:53   作者:Gary Zhang  
最近做項目,需要用到自動登錄淘寶,正好在學習python,整網(wǎng)絡爬蟲,所以就嘗試著寫一個腳本,自動解決。有相同需求的小伙伴可以參考下

一個小項目自動登錄淘寶聯(lián)盟抓取數(shù)據(jù),由于之前在Github上看過類似用Python寫的代碼因此選擇用Python來寫,第一次用Python正式寫程序還是被其“簡單”所震撼,當然用的時候還是對其(2.7版)編碼、遷移環(huán)境等問題所困擾,還好后來都解決了。

言歸正傳,抓取淘寶聯(lián)盟的數(shù)據(jù)首先要解決的就是登錄的問題,之前一般會碰到驗證碼的困擾,現(xiàn)在支持二維碼掃碼登錄反而簡單了,以下是登錄的Python代碼,主要是獲取二維碼打印,然后不斷的檢查掃碼狀態(tài),如果過期了重新請求二維碼(主要看邏輯,由于有些通用方法做了封裝所以不保證能直接執(zhí)行)

def getQRCode(enableCmdQR):
  payload = {'_ksTS': str(time.time()), 'from': 'alimama'}
  qrCodeObj = utils.fetchAPI('https://qrlogin.taobao.com/qrcodelogin/generateQRCode4Login.do', payload,
                "json", None, True, True)
 
  print(qrCodeObj)
  utils.printQRCode('http:' + qrCodeObj['url'], enableCmdQR)
  lgToken = qrCodeObj['lgToken']
  return lgToken
 
 
def login(enableCmdQR=False):
  lgToken = getQRCode(enableCmdQR)
  code = 0
  successLoginURL = ""
  while code != 10006:
    payload = {'lgToken': lgToken,
          'defaulturl': 'http%3A%2F%2Flogin.taobao.com%2Fmember%2Ftaobaoke%2Flogin.htm%3Fis_login%3D1&_ksTS=' + str(
            time.time())}
 
    rObj = utils.fetchAPI('https://qrlogin.taobao.com/qrcodelogin/qrcodeLoginCheck.do', payload, "json", True,
               False)
    code = int(rObj['code'])
    if 10000 == code:
      # print("請掃描二維碼登錄")
      continue
    elif 10001 == code:
      print("已掃描二維碼,請在確認登錄")
    elif 10004 == code:
      print("已過期請重新掃描")
      login()
    elif 10006 == code:
      successLoginURL = rObj["url"]
      print("登錄成功,正在跳轉(zhuǎn)")
    else:
      print("未知錯誤,退出執(zhí)行")
      sys.exit(0)
 
    time.sleep(5)
 
  print "登錄成功跳轉(zhuǎn):" + successLoginURL
  r = utils.fetchAPI(successLoginURL, None, "raw", True, False, True)
  utils.fetchAPI(r.headers['Location'], None, "raw", True, True, False)

解決登錄問題接下去就要解決保存狀態(tài)的問題,Python的Requests庫非常強大,如果簡單的話可以直接使用request.session來進行會話操作,但由于項目中的很多操作是異步的因此需要解決cookie的存儲和讀取,使用pickel進行對像的序列化和反序列化。其中保存cookie默認用增量的方式進行更新

def save_cookies(cookies, overWrite=False):
  try:
    currentCookie = requests.utils.dict_from_cookiejar(cookies)
    if len(currentCookie) < 1:
      return
    oldCookie = requests.utils.dict_from_cookiejar(load_cookies())
    with open(config.COOKIE_FILE, 'w') as f:
      if not overWrite:
        cookieDict = dict(oldCookie, **currentCookie)
      else:
        cookieDict = requests.utils.dict_from_cookiejar(cookies)
      pickle.dump(cookieDict, f)
      print 'Saved cookie'
      print cookieDict
      f.close()
  except:
    print 'Save cookies failed', sys.exc_info()[0]
    sys.exit(99)


def load_cookies():
  try:
    with open(config.COOKIE_FILE, 'r') as f:
      cookies = requests.utils.cookiejar_from_dict(pickle.load(f))
      f.close()
  except:
    cookies = []
  return cookies

封裝好之后,在requests.Session請求時加載cookie并保存cookie

s = requests.Session()
# 統(tǒng)一請求API
def fetchAPI(url, params=None, resultFormat="text", isNeedCookie=True, allowRedirects=True, saveCookie=False,
       method='GET'):
  try:
    cookies = load_cookies()
    if 'POST' == method:
      response = s.post(url, data=params, headers=config.Headers, cookies=cookies)
    else:
      response = s.get(url, params=params, headers=config.Headers, cookies=cookies,
               allow_redirects=allowRedirects)

    if "json" == resultFormat:
      result = response.json()
    elif "raw" == resultFormat:
      result = response
    else:
      result = response.text

    # if saveCookie:
    # print 'save cookie:' + str(response.cookies)
    save_cookies(response.cookies)

    return result

  except Exception, e:
    print e
    return False

這兩步做好之后基本后續(xù)的請求就直接使用統(tǒng)一的API請求方法即可,效果也非常不錯,運行效果截圖:

當然還有一個問題未解決:如何在session過期之后如何自動重新申請(不確定淘定是否支持),由于淘寶是用統(tǒng)一登錄而且是獨立的服務因此通過瀏覽器自動刷新或者請求過程中不斷去更新cookie都沒有獲得服務器方更新的票據(jù),不知道這一塊大家有沒有可以提供的思路。

相關文章

  • Python內(nèi)置debug庫pdb用法示例詳解

    Python內(nèi)置debug庫pdb用法示例詳解

    這篇文章主要介紹了Python內(nèi)置debug庫pdb用法的相關資料,Python的內(nèi)置調(diào)試器pdb可以有效幫助開發(fā)者掌握程序執(zhí)行流程和變量狀態(tài),通過插入pdb.set_trace()設置斷點,或直接從命令行啟動pdb,可以進入交互式調(diào)試模式,需要的朋友可以參考下
    2024-11-11
  • 使用Python實現(xiàn)圖像有效壓縮的方法

    使用Python實現(xiàn)圖像有效壓縮的方法

    在數(shù)字時代,圖像作為信息傳遞的重要媒介,在網(wǎng)頁設計、移動應用和多媒體制作中扮演著不可或缺的角色,本文將詳細介紹如何使用Python,一個功能強大且易于學習的編程語言,來實現(xiàn)圖像的有效壓縮,感興趣的朋友可以參考下
    2024-03-03
  • Python處理application/json錯誤的方法詳解

    Python處理application/json錯誤的方法詳解

    這篇文章主要為大家詳細介紹了python使用httpx_sse調(diào)用sse流式接口對響應格式為application/json的錯誤信息處理的相關知識,需要的可以了解下
    2025-02-02
  • Python操作rabbitMQ的示例代碼

    Python操作rabbitMQ的示例代碼

    這篇文章主要介紹了Python操作rabbitMQ的示例代碼,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2019-03-03
  • 《Python學習手冊》學習總結

    《Python學習手冊》學習總結

    本篇文章是讀者朋友在學習了《Python學習手冊》這本書以后,總結出的學習心得,值得大家參考學習。
    2018-01-01
  • python語言time庫和datetime庫基本使用詳解

    python語言time庫和datetime庫基本使用詳解

    這篇文章主要介紹了python語言time庫和datetime庫基本使用詳解,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-12-12
  • 利用Python的Django框架生成PDF文件的教程

    利用Python的Django框架生成PDF文件的教程

    這篇文章主要介紹了利用Python的Django框架生成PDF文件的教程,用ReportLab API動態(tài)生成PDF文件,需要的朋友可以參考下
    2015-07-07
  • Python 裝飾器實現(xiàn)DRY(不重復代碼)原則

    Python 裝飾器實現(xiàn)DRY(不重復代碼)原則

    python的裝飾器就是一種代碼簡潔的手段,在函數(shù)和方法有改動時,使得改動量最小。這篇文章給大家介紹了Python 裝飾器實現(xiàn)DRY(不重復代碼)原則,感興趣的朋友一起看看吧
    2018-03-03
  • Python列表append()函數(shù)使用方法詳解

    Python列表append()函數(shù)使用方法詳解

    python中的append()函數(shù)是在列表末尾添加新的對象,且將添加的對象最為一個整體,下面這篇文章主要給大家介紹了關于Python列表append()函數(shù)使用方法的相關資料,文中通過實例代碼介紹的非常詳細,需要的朋友可以參考下
    2022-06-06
  • PyTorch線性回歸和邏輯回歸實戰(zhàn)示例

    PyTorch線性回歸和邏輯回歸實戰(zhàn)示例

    這篇文章主要介紹了PyTorch線性回歸和邏輯回歸實戰(zhàn)示例,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-05-05

最新評論