近期需要从论坛采集一些数据,就使用爬虫专属语言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()