想实现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
输出结果:
能够看到登陆未成功,须要输入验证码,关于验证码,下一篇中介绍。