注意事项主要是两个:
第一个,模拟登陆时需要添加header,不然模拟登陆时会报url error:HTTP 403 Forbidden
错误。解决办法也很简单,urllib2 的opener添加opener.addheaders = [('User-agent', 'Mozilla/5.0')]即可。
第二:模拟登陆的参数除了username和password外,另外还有3个参数,其中两个参数是动态生成,这
就要求我们先获取登录页面源码,从中找到这两个动态参数,再写入模拟登陆参数中。如下图两所示:
其中,第一幅图的获取涉及抓包插件及post方法。具体情况可参照: [Python]网络爬虫(十):一个爬虫的诞生全过程(以山东大学绩点运算为例)
第二幅图涉及一个方法论:写爬虫一定要具体分析目的页面源码,不能生搬硬套。点击右键-查看页面源代码,即可找到第二幅图片所示代码片段。
源代码如下:
#coding:utf-8 import urllib import urllib2 import cookielib import re filename = 'cookie.txt' #声明一个MozillaCookieJar对象实例来保存cookie,之后写入文件 cookie = cookielib.MozillaCookieJar(filename) opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cookie))
#动态获取参数,该参数本质为登陆流水号,无该流水号无法成功登陆,采用正则表达式获取
h = opener.open('https://passport.csdn.net').read().decode("utf8") patten1 = re.compile(r'name="lt" value="(.*?)"') patten2 = re.compile(r'name="execution" value="(.*?)"') b1 = patten1.findall(h) b2 = patten2.findall(h) postdata = urllib.urlencode({ 'username':'你的登录名', 'password':'你的登陆密码', 'rememberMe':'true', 'lt': b1[0], 'execution': b2[0], '_eventId': 'submit', }) #登录URL loginUrl = 'https://passport.csdn.net/account/login' #模拟登录,并把cookie保存到变量
#添加headers
opener.addheaders = [('User-agent', 'Mozilla/5.0')] result = opener.open(loginUrl,postdata) #保存cookie到cookie.txt中 cookie.save(ignore_discard=True, ignore_expires=True) #利用cookie请求访问另一个网址,此网址是成绩查询网址 gradeUrl = 'http://my.csdn.net/' #请求访问成绩查询网址 result = opener.open(gradeUrl) print result.read()