標籤:python jsessionid
在使用Python對一些網站的資料進行採集時,經常會遇到需要登入的情況。這些情況下,使用FireFox等瀏覽器登入時,內建的調試器(快速鍵F12)就可以看到登入的時候網頁向伺服器提交的資訊,把這部分資訊提取出來就可以利用Python 的 urllib2 庫結合Cookie進行類比登入然後採集資料,如以下代碼:
#coding=utf-8import urllibimport urllib2import httplibimport cookieliburl = ‘http://www.xxx.net/‘cookie = cookielib.CookieJar()cj=urllib2.HTTPCookieProcessor(cookie)#設定登入參數,使用瀏覽器的調試器等抓包工具得到postdata=urllib.urlencode({‘JSESSIONID‘:‘1F616774D9548C1E8AF12A65B470B663‘, ‘username‘:‘admin‘,‘password‘:‘admin‘})#產生請求request=urllib2.Request(url, postdata)#設定代理request.set_proxy(‘xx.xx.xx.xx:xx‘,‘http‘)#登入opener=urllib2.build_opener(cj)urllib2.install_opener(opener) html=opener.open(request)print html.read()#開啟資料頁面開始採集資料s = urllib2.urlopen(‘http://www.xx.net‘).read()
可以留意到,提交的資料包含了一個JSESSIONID參數,百度一下就知道,通常Tomcat伺服器產生一個新的會話的時候就會產生這個ID,並且包含在登入頁面的HEAD裡面,如:
650) this.width=650;" src="http://s3.51cto.com/wyfs02/M02/5B/29/wKiom1UAUKXyY5ueAAHUFoPW_H4458.jpg" title="JSESSIONID.png" alt="wKiom1UAUKXyY5ueAAHUFoPW_H4458.jpg" />
某些伺服器使用固定一個JSESSIONID就可以重複登入,但某些就不行,應該是伺服器可以設定的。對於固定JSESSIONID可以登入的,上面的代碼就可以應付了,但動態改變的就需要先擷取本次會話的JSESSIONID,然後再提交登入:
#擷取Tomcat伺服器產生的JSESSIONIDrequest = urllib2.Request(url)set_cookie = urllib2.urlopen(request).info()[‘Set-Cookie‘]json_id = set_cookie.split(‘;‘)[0]#JSESSIONID=3037DCDF69A6454FC525E38C41E6B611json_id = json_id.split(‘=‘)[-1]print json_id
本文出自 “自由自我” 部落格,請務必保留此出處http://hhuayuan.blog.51cto.com/1630327/1619513
Python爬蟲擷取JSESSIONID登入網站