模拟登录人人网
代码:
#_*_ coding=utf8 _*_
import urllib
import urllib2
import cookielib
import time
import lxml.html
LOGIN_URL = "http://www.renren.com/PLogin.do"
LOGIN_EMAIL = '**********'
LOGIN_PASSWORD = '*********'
def parse_form(html):
tree = lxml.html.fromstring(html)
data = {}
for e in tree.cssselect('form input'):
if e.get('name'):
data[e.get('name')] = e.get('value')
return data
cj = cookielib.CookieJar()
opener=urllib2.build_opener(urllib2.HTTPCookieProcessor(cj))
html = opener.open(LOGIN_URL).read()
data = parse_form(html)
data['email'] = LOGIN_EMAIL
data['password'] = LOGIN_PASSWORD
encoded_data = urllib.urlencode(data)
request = urllib2.Request(LOGIN_URL,encoded_data)
reponse = opener.open(request)
content = reponse.read()
html = open('renren.html','w')
html.write(content)
html.close()
python模拟登录的代码网上已经有很多了,其实都是大同小异吧,都是那一套流程。
主要解释两部分代码:
1 .函数parse_form
def parse_form(html):
tree = lxml.html.fromstring(html)
data = {}
for e in tree.cssselect('form input'):
if e.get('name'):
data[e.get('name')] = e.get('value')
return data
这个函数从网页解析出来我们所需要提交的表单,form 标签下的 input都有可能是我们所需要处理的,有些值是固定的的,有些是需要我们输入的。
这是解析出来的表单
{'autoLogin': 'true',
'captcha_type': 'web_login',
'domain': 'renren.com',
'email': '',
'icode': None,
'key_id': '1',
'origURL': 'http://www.renren.com/home',
'password': None}
我们要关心,那些空值的项,’email’,’password’,这些也正网页上需要我们输入的项,对于这些项,我们赋上我们自己的账号,密码
我们提交表单的网页,直接分析网页是可以得到,从form 标签的 action属性,我们可以获取这次要提交表单的url.
2 .cookie
最初学习python 的时候也试着写了几个模拟登录的小程序,但无疑例外失败,当时什么也不懂,不知道为什么,会出错感觉自己抓包分析错了。其实是忽略了cookie
什么是cookie
cookie是网站在http响应头中传输的少量数据。浏览器将这些数据存储起来,并在后续对该网站的请求头中包含他们。这样就可以让网站识别和跟踪用户。
缺少了cookie,失败是当然的了。
cj = cookielib.CookieJar()
opener=urllib2.build_opener(urllib2.HTTPCookieProcessor(cj))
这部分代码也就是加载cookie的作用
大致这样一个登陆程序也就完成,现在python的中可以用于爬虫的工具是十分之多,例如使用mechanize,几行代码就可以实现一个模拟登录的程序。
import mechanize
br = mechanize.Browser()
br.open("http://www.renren.com/PLogin.do")
br.select_form(nr=0)
br['email'] = '*******'
br['password'] = '*******'
response = br.submit()
print response.geturl()
感觉十分方便。