近期需要從論壇採集一些數據,就使用爬蟲專屬語言python寫了一個小爬蟲,實現自動登錄,併到指定的板塊採集帖子標題、作者等信息。
實現自動登錄的關鍵在於模擬瀏覽器向服務器發送數據包,用Fiddler抓包看一下,過程非常清晰:
1. 論壇的登錄頁面鏈接 http://bbs.cisps.org/ucp.php?mode=login
2. 研究Fiddler捕捉到的數據包,可以看到瀏覽器以Post方法向服務器發送了包含用戶名和口令等字段,如圖1所示,
圖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()