python爬虫 模拟登陆校园网-初级
最近跟同学学习爬虫的时候看到网上有个帖子,好像是山大校园网不稳定,用py做了个模拟登陆很有趣,于是我走上了一条不归路.....
先上一张校园网截图
首先弄清一下模拟登陆的原理:
1:服务器判定浏览器登录使用浏览器标识,需要模拟登陆
2: 需要post账号,密码,以及学校id
python走起,我用的2.7版本,用notepad++写的,绑定python可以直接运行
由于是模拟网页登陆,需要导入urllib urllib2 cookielib库,前两个有与网页直接的接口,cookielib就是用来处理cookie的
先了解一下这几个库函数 一片不错的博客
http://www.cnblogs.com/mmix2009/p/3226775.html
ok,开始构建一个opener
cookie=cookielib.CookieJar()
opener=urllib2.build_opener(urllib2.HTTPCookieProcessor(cookie))
用urllib2.HTTOCookieProcessor处理CookieJar获得的cookie,并被build_opener处理
然后构建一下需要post的header,这个地址并不是我们输入账号密码的地址,而是提交数据被处理的地址,在登陆的时候用浏览器抓一下:
嗯 就是右边的那个URL,我们最后提交的网址就是那个。我们看一下他的header
差不多就这些,可以都写上,也可以只写服务器验证的UA等等
需要提交的数据:
data={
"username":"xxxxxxxx",
"password":"xxxxx", }
post_data=urllib.urlencode(data)
然后就是post了,使用Requset(url,post_data,header)
req=urllib2.Request('http://139.198.3.98/sdjd/userAction!login.action',post_data,headers)
content=opener.open(req)
再open(req)放到content里,print一下试试是否成功。
然后.....然后发现失败了找找bug.....
因为是学习的网上的,那个简单的例子只有用户名和密码,而这个登陆还要选择大学.......
好吧,那就先找下源码,结果没找到,就从header里找,果然在cookie里有个schoo id=XXXX,没错了,就是这个了,于是在data里再加上这个,结果提交了以后还是失败。最后发现提交的data里的userName,password,school_必须和request里的名称大小写下划线什么的要一致:
最终代码(账号密码什么的用XXXX代替了):
import urllib
import urllib2
import cookielib data={
"userName":"xxxxxxxx",
"password":"xxxxx",
"school_id":"xxxx"
}
post_data=urllib.urlencode(data) cookie=cookielib.CookieJar()
opener=urllib2.build_opener(urllib2.HTTPCookieProcessor(cookie)) headers={
'Accept': 'text/html, application/xhtml+xml, image/jxr, */*',
'Accept-Encoding': 'gzip, deflate',
'Accept-Language': 'en-US, en; q=0.8, zh-Hans-CN; q=0.5, zh-Hans; q=0.3',
'Connection': 'Keep-Alive',
'Host': '139.198.3.98',
'Referer': 'http://139.198.3.98/sdjd/protalAction!loginInit.action?wlanuserip=10.177.31.212&basip=124.128.40.39',
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.79 Safari/537.36 Edge/14.14393',
'X-Requested-With': 'XMLHttpRequest'
} req=urllib2.Request('http://139.198.3.98/sdjd/userAction!login.action',post_data,headers)
content=opener.open(req) print content.read().decode("utf-8")
运行一下:
初步success~以后在深一步研究
还有求dalao解答我从notepad++上用#注释没效果咋回事......
------------------------------------------------------------------------------------------------------------------------------------
------------------------------------------------------------------------------------------------------------------------------------
学习了requests库 果然好用。。。贴一下代码
import requests se=requests.Session() url='http://139.198.3.98/sdjd/userAction!login.action'
data={
"userName":"xxxxxxxx",
"password":"xxxxx",
"school_id":"xxxx"
} headers={
'Accept': 'text/html, application/xhtml+xml, image/jxr, */*',
'Accept-Encoding': 'gzip, deflate',
'Accept-Language': 'en-US, en; q=0.8, zh-Hans-CN; q=0.5, zh-Hans; q=0.3',
'Connection': 'Keep-Alive',
'Host': '139.198.3.98',
'Referer': 'http://139.198.3.98/sdjd/protalAction!loginrInit.action?wlanuserip=10.177.31.212&basip=124.128.40.39',
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.79 Safari/537.36 Edge/14.14393',
'X-Requested-With': 'XMLHttpRequest'
} content=se.post(url,data=data,headers=headers) print content.text
// 之前#没用是没保存成py格式直接运行了......
python爬虫 模拟登陆校园网-初级的更多相关文章
- python爬虫模拟登陆
python爬虫模拟登陆 学习了:https://www.cnblogs.com/chenxiaohan/p/7654667.html 用的这个 学习了:https://www.cnblogs.co ...
- Python 爬虫模拟登陆知乎
在之前写过一篇使用python爬虫爬取电影天堂资源的博客,重点是如何解析页面和提高爬虫的效率.由于电影天堂上的资源获取权限是所有人都一样的,所以不需要进行登录验证操作,写完那篇文章后又花了些时间研究了 ...
- 【小白学爬虫连载(10)】–如何用Python实现模拟登陆网站
Python如何实现模拟登陆爬取Python实现模拟登陆的方式简单来说有三种:一.采用post请求提交表单的方式实现.二.利用浏览器登陆网站记录登陆成功后的cookies,采用get的请求方式,传入c ...
- Python实现模拟登陆
大家经常会用Python进行数据挖掘的说,但是有些网站是需要登陆才能看到内容的,那怎么用Python实现模拟登陆呢?其实网路上关于这方面的描述很多,不过前些日子遇到了一个需要cookie才能登陆的网站 ...
- 爬虫模拟登陆之formdata表单数据
首先HTTP协议是个无连接的协议,浏览器和服务器之间是以循环往复的请求回复来交互的,交互的形式是以文件形式来进行的.比如在chrome开发者工具network中看到了 每一行是一个文件,又文件大小啊, ...
- python+requests模拟登陆 学校选课系统
最近学校让我们选课,每天都有不同的课需要选....然后突发奇想试试用python爬学校选课系统的课程信息 先把自己的浏览器缓存清空,然后在登陆界面按f12 如图: 可以看到登陆时候是需要验证码的,验证 ...
- python selenium模拟登陆163邮箱。
selenium是可以模拟浏览器操作. 有些爬虫是异步加载的,通过爬取网页源码是得不到需要的内容.所以可以模拟浏览器去登陆该网站进行爬取操作. 需要安装selenium通过pip install xx ...
- python 脚本自动登陆校园网
学校的校园网每次重开电脑时都要重新打开浏览器进行网页登录,繁琐的操作比较麻烦,于是便写了个python的脚本进行自动登录,下面说下具体的操作过程: 1. 方法说明 博主采用的python的 reque ...
- Python作业模拟登陆(第一周)
模拟登陆:1. 用户输入帐号密码进行登陆2. 用户信息保存在文件内3. 用户密码输入错误三次后锁定用户 思路: 1. 用户名密码文件为passwd,锁定用户文件为lock 2. 用户输入账号密码采用i ...
随机推荐
- eharts入门篇一
1.导入文件样式 从官网下载界面选择你需要的版本下载,根据开发者功能和体积上的需求,我们提供了不同打包的下载,如果你在体积上没有要求,可以直接下载完整版本. 2,引入 ECharts 文件 < ...
- GTK简单了解记录
GTK+http://zh.wikipedia.org/wiki/GTK%2B#.E5.9B.BE.E5.BD.A2.E6.97.A0.E5.85.B3.E4.BB.A3.E7.A0.81 GTK+最 ...
- JQuery 通过方向键控制div上下左右移动
在CSS中当DOM元素的position属性为absolute或relative时,我们可以通过改变这个元素的left和top属性的具体值来控制元素在页面中显现的位置. 利用上述属性,我们可以简单实现 ...
- 详解Session分布式共享(.NET CORE版)
一.前言&回顾 在上篇文章Session分布式共享 = Session + Redis + Nginx中,好多同学留言问了我好多问题,其中印象深刻的有:nginx挂了怎么办?采用Redis的S ...
- CSS3 02. 边框、边框圆角、边框阴影、边框图片、渐变、线性渐变、径向渐变、背景、过渡transition、2D转换
边框圆角 border-radius 每个角可以设置两个值,x值.y值 border-top-left-radius:水平半径 垂直半径 border-radius:水平半径/垂直半径 border- ...
- poj3320尺取法
Jessica's a very lovely girl wooed by lots of boys. Recently she has a problem. The final exam is co ...
- linux网络设置和虚拟机克隆转移之后Error:No suitable device found:no device found for connection 'System eth0'问题解决
以root用户登录 #vi /etc/sysconfig/network-scripts/ifcfg-eth0 #编辑配置文件,添加修改以下内容 BOOTPROTO=static #启用 ...
- Python学习之路-Day1-Python基础
学习python的过程: 在茫茫的编程语言中我选择了python,因为感觉python很强大,能用到很多领域.我自己也学过一些编程语言,比如:C,java,php,html,css等.但是我感觉自己都 ...
- linux-redhat-iso 下载
http://archive.download.redhat.com/pub/redhat/linux/9/en/iso/i386/ http://www.jb51.net/do/plus/downl ...
- JavaScript中的DOM函数与关键字汇总
DOM节点的属性 属性 描述 attributes数组 获取某个节点的所有属性子节点(实际是一个NodeList对象) childNodes数组 获取某个节点的所有子节点,可以按数组方式访问子节 ...