python 實現華安信達論壇自動登錄

近期需要從論壇採集一些數據,就使用爬蟲專屬語言python寫了一個小爬蟲,實現自動登錄,併到指定的板塊採集帖子標題、作者等信息。

實現自動登錄的關鍵在於模擬瀏覽器向服務器發送數據包,用Fiddler抓包看一下,過程非常清晰:

1. 論壇的登錄頁面鏈接 http://bbs.cisps.org/ucp.php?mode=login

2. 研究Fiddler捕捉到的數據包,可以看到瀏覽器以Post方法向服務器發送了包含用戶名和口令等字段,如圖1所示,

username和password之外,還有一項sid,經過多次抓包分析,sid字段的值是cookie中的一項,如圖2所示,

2

cookie中phpbb2mysql的值與之前我們分析的sid值一致,到此,我們就能夠完整構造數據包模擬瀏覽器登錄

     3. 完整代碼:

		username = 'xxxxxxxx'		# 用戶名
		password = xxxxxxxx		# 口令
		url_0 = 'http://bbs.cisps.org/'		# 首先請求主頁
		req_0 = urllib2.Request(url_0 ,headers = self.headers)
		self.opener.open(req_0).read()
		phpbb2mysql_sid = ''				
		for cookie in self.cookieHandler:
			if cookie.name=="phpbb2mysql_sid":
				phpbb2mysql_sid = cookie.value		# 關鍵:將Cookie中的phpbb2mysql_sid值賦給變量
		postdata = {
					'username':	 username,
					'password':	 password,
					'autologin': 'on',
					'sid':       phpbb2mysql_sid,
					'redirect':	 'index.php',
					'login':	 '登錄',
					'redirect':	 './ucp.php?mode=login'}		
		postencodedata = urllib.urlencode(postdata)		# 數據包編碼
		url_1 = 'http://bbs.cisps.org/ucp.php?mode=login'
		req_1 = urllib2.Request(url_1,postencodedata,headers=self.headers)		# 請求
		data_1  = self.opener.open(req_1).read()


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