您的位置:首页 > 编程语言 > Python开发

python 实现华安信达论坛自动登录

2014-12-10 20:58 573 查看
近期需要从论坛采集一些数据,就使用爬虫专属语言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()
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息