前言Python由于其第三方库扩展多、接口简洁、处理网页方便等原因被广泛应用于爬虫的编写。网络爬虫的第一步即是要能够实现代码的自动登录,登录后使用获得的cookies来访问页面。
本文使用Python2.7.13+Requests来实现简单网页的登录(不含验证码)。
获取需要提交的变量
自动登录的基本原理是模拟人工填入账号密码,并向服务器进行提交,获取服务器的应答(以cookies的形式)。因此第一步我们需要知道在网页端登录时,浏览器向服务器提交的账号与密码的变量分别是什么?
这里以Google Chrome为例演示如何查看提交的账号与密码的变量名(其他浏览器类似):
打开需要登录的网址,并按F12,之后选择“Network”标签(勾选“preserve log”)如图:
之后填入账号、密码并进行登录,登录成功后在下面的页面Name中点击第一个,会在右边弹出下面的窗口,滑动到最下面可以看到Form Data,即是浏览器向服务器POST提交的数据。自动登录就是使用程序向服务器提交这些数据:其中userName即是输入的账号,passWord即是输入的密码。(注:如果第一步的时候不勾选“preserve log”,在这一步中可能看不到Form Data)
Requests是Python中的HTTP库,能够模拟浏览器进行网站的登录与网页内容的获取。下面使用Python代码模拟Chrome进行登录:import urllib
import urllib2
import requests
import re
import sys
import requests.utils
sys.path.append("libs")
s=requests.session()#获取会话对象
headers={'User-Agent':'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.78 Safari/537.36','Content-Type':'application/x-www-form-urlencoded'}#设置请求的信息头
url="http://my.its.csu.edu.cn"#设置请求的URL
Data={'userName':'XXXXX','passWord':'XXXX'}#设置请求时填写的账号密码(变量名上一步获得)
login=s.post(url,data=Data,headers=headers)#向服务器发出POST请求
print login.status_code#请求的状态码
print login.url#请求成功后跳转页面的URL
dict_cookies=s.cookies.get_dict()#获取cookies
print login.text#获取跳转后页面的内容
response=s.get(afterUrl,cookies=s.cookies,headers=headers)#获取登录后页面的内容,其中afterUrl为登陆后可见的URL
总结
使用Python2.7进行网站的模拟登陆,同时获得登陆成功的cookies。针对含有验证码的情况暂时没有考虑,后续会加上含有验证码时的处理方法。