python 淘寶系列(一):模擬登錄

 前言

    想實現python登陸淘寶,大概有兩種思路:1. 使用淘寶開放API接口;css

                                                                   2.使用模擬登錄發送post 數據登陸。html

    兩種方式各有優缺點。使用淘寶API,首先得裝API庫,比較大,有200多M,對小程序而言不划算。另外一方面,須要研究他的API,裏面函數不少,使用起來並沒那麼容易。第二種方式,就是各類過程須要親自動手寫代碼,須要找post data結構,適合實現簡單功能。本文采用第二種方式。java

參考資料

python實現模擬登陸 :博文,簡介模擬登陸代碼流程(主要參考)python

新浪博客登陸 :python模擬登陸新浪微博,代碼更復雜,沒有實際運行,不知道是否跑的通web

詳解抓取網站,模擬登錄,抓取動態網頁的原理和實現(Python,C#等):講原理的,還沒來得及仔細看,大體瀏覽下還不錯的樣子json

【整理】關於抓取網頁,分析網頁內容,模擬登錄網站的邏輯/流程和注意事項:講解較詳細,從上面網頁中打開的連接小程序

Python專題教程:抓取網站,模擬登錄,抓取動態網頁 : 備用資料服務器

流程簡介

核心思想是:1.設置一個cookie處理器,它負責從服務器下載cookie到本地,而且在發送請求時帶上本地的cookie (這部分還不是很懂,關於下載cookie的有效主頁地址不是很明確)cookie

                    2.向淘寶登陸頁面發送一個請求Request, 包括登陸界面地址,上傳的數據包post data(上傳以前應先編碼,使得與服務器編碼一致),Http headereclipse

                     3.利用urllib2.urlopen發送請求,獲得響應Response

                     4.查看響應結果

代碼以下:

# -*- coding: utf-8 -*-

import urllib
import urllib2
import cookielib

hostUrl = "https://login.taobao.com/member/login.jhtml" 
#此處不明白,不知道下載cookie主機地址,所以使用登陸界面地址

tbLoginUrl = "https://login.taobao.com/member/login.jhtml"

#cookie 自動處理器
cj = cookielib.LWPCookieJar() #LWPCookieJar提供可讀寫操做的cookie文件,存儲cookie對象
cookieSupport= urllib2.HTTPCookieProcessor(cj)
opener = urllib2.build_opener(cookieSupport, urllib2.HTTPHandler)
urllib2.install_opener(opener)

#打開登錄頁面
taobao = urllib2.urlopen(tbLoginUrl)
curl = taobao.geturl()
print curl

headers = {
    'User-Agent' : 'Mozilla/5.0 (Windows NT 6.1; WOW64; rv:14.0) Gecko/20100101 Firefox/14.0.1',  
    'Referer' : '******'
}

password = "" #你的用戶名和密碼
username = ""

postData = {
    'CtrlVersion': '1,0,0,7',  
    'TPL_password':password,  
    'TPL_redirect_url':'',  
    'TPL_username':username,  
    #'_tb_token_':'I262PYW48um', 
    'action':'Authenticator',  
    'callback':'jsonp312',  
    'css_style':'',  
    'event_submit_do_login':'anything',  
    'fc':2,  
    'from':'tb',  
    'from_encoding':'',  
    'guf':'',  
    'gvfdcname':'',  
    'isIgnore':'',  
    'llnick':'',  
    'loginType':3,  
    'longLogin':0,  
    'minipara' :'',  
    'minititle':'',  
    'need_sign':'',  
    'need_user_id':'',  
    'not_duplite_str':'',  
    'popid':'',  
    'poy':'',  
    'pstrong':'',  
    'sign':'',  
    'style':'default',  
    'support':'000001',  
    'tid':''         
}

#編碼
postData = urllib.urlencode(postData)

#發送請求
request = urllib2.Request(tbLoginUrl, postData, headers)
print type(request)

response = urllib2.urlopen(request)
#查看響應結果
url = response.geturl()
text = response.read()#爲str類型,可是嘗試使用 gbk , ascii解碼都不正確,沒法輸出,暫時沒想到解決辦法
#原來是編輯器的緣由,改用eclipse或者python IDE運行,結果以下
info = response.info()
status = response.getcode()
print status,url,info
print text

輸出結果:

能夠看到登陸未成功,須要輸入驗證碼,關於驗證碼,下一篇中介紹。

相關文章
相關標籤/搜索