Python爬蟲獲取JSESSIONID登錄網站

在使用Python對一些網站的數據進行採集時,經常會遇到需要登錄的情況。這些情況下,使用FireFox等瀏覽器登錄時,自帶的調試器(快捷鍵F12)就可以看到登錄的時候網頁向服務器提交的信息,把這部分信息提取出來就可以利用Python 的 urllib2 庫結合Cookie進行模擬登錄然後採集數據,如以下代碼:

#coding=utf-8
import urllib
import urllib2
import httplib
import cookielib
url = '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裏面,如下圖:

wKiom1UAUKXyY5ueAAHUFoPW_H4458.jpg


某些服務器使用固定一個JSESSIONID就可以重複登錄,但某些就不行,應該是服務器可以設置的。對於固定JSESSIONID可以登錄的,上面的代碼就可以應付了,但動態改變的就需要先獲取本次會話的JSESSIONID,然後再提交登錄:

#獲取Tomcat服務器產生的JSESSIONID
request = urllib2.Request(url)
set_cookie = urllib2.urlopen(request).info()['Set-Cookie']
json_id = set_cookie.split(';')[0]#JSESSIONID=3037DCDF69A6454FC525E38C41E6B611
json_id = json_id.split('=')[-1]
print json_id



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章