這是我的代碼,不知道為什麼一直無法成功
import urllib2
import urllib
import cookielib
import re
class Fetcher(object):
def init(self,name=None,pwd=None):
self.cj = cookielib.LWPCookieJar() #獲取一個保存cookie的對象。
self.cookie_processor = urllib2.HTTPCookieProcessor(self.cj) #將一個保存cookie對象,和一個HTTP的cookie的處理器綁定
self.opener = urllib2.build_opener(self.cookie_processor, urllib2.HTTPHandler) #創建一個opener,將保存了cookie的http處理器,設置一個handler用於處理http的URL的打開
urllib2.install_opener(self.opener) #將包含了cookie、http處理器、http的handler的資源和urllib2對象綁定在一起
self.name = name
self.pwd = pwd
self.hosturl = 'https://twitter.com/' #登錄的主頁面
self.posturl = 'https://twitter.com/sessions' #post數據接收和處理的頁面(我們要向這個頁面發送我們構造的Post數據)
def login(self):
#跳轉到登陸界面,此時可獲得cookie
req=urllib2.Request(self.hosturl)
resp=urllib2.urlopen(req)
html = resp.read()
#得到表單中的authenticity_token
att=re.compile('value="(.*?)" name="authenticity_token"')
t = att.search(html)
authenticity_token = t.group(1)
#處理cookie
#cookies = ''
#for index, cookie in enumerate(self.cj):
# cookies = cookies+cookie.name+"="+cookie.value+";";
#cookie = cookies[:-1]
#print "cookies:",cookie
#request headers,仿冒浏覽器
self.header = {#':host': 'twitter.com',
#':method': 'POST',
#':path': '/sessions',
#':scheme': 'https',
#':version': 'HTTP/1.1',
#'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8',
#'accept-encoding': 'gzip,deflate,sdch',
#'accept-language': 'zh-CN,zh;q=0.8',
# 'cache-control': 'max-age=0',
# #'content-length': '214',
#'content-type': 'application/x-www-form-urlencoded',
# 'cookie': cookie,
#'origin': 'https://twitter.com',
'referer': 'https://twitter.com/',
'user-agent': 'Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/31.0.1650.63 Safari/537.36'
}
#print(self.cj)
#form data,提交的表單數據
postForm = {'session[username_or_email]':self.name,
'session[password]':self.pwd,
'remember_me':'1',
'return_to_ssl':'true',
'scribe_log':'',
'redirect_after_login':'/',
'authenticity_token':authenticity_token,
}
postData=urllib.urlencode(postForm) #編碼
#print(postData)
#提交表單
rep = urllib2.Request(self.posturl,postForm,self.header)
resp=urllib2.urlopen(req)
html = resp.read()
print(html)
#req=urllib2.Request(self.hosturl)
#resp=urllib2.urlopen(req)
#html = resp.read()
#print(html)
if name == '__main__':
username = '*******' #用戶名
password = '******' #密碼
fet = Fetcher(username,password);
fet.login()
大神幫忙看看吧。
我的思路和網上的思路一樣的,我是個菜鳥,也沒什麼幣,希望大家見諒了
你可以試試 requests庫。
http://www.python-requests.org/en/latest/user/advanced/#session-objects
做登錄主要是狀態同步的問題。這個庫封裝的比較好。