使用requests和fiddler模拟登陆51cto并获取下载币
开发环境
操作系统:windows 10
Python版本 :3.6
爬取网页模块:requests
分析网页工具:BeautifulSoup4,fiddler4
关于requests
requests是一个第三方库,可以用来模拟浏览器请求,如get,post
它也有Session功能,可以保持会话信息,如cookie等,这个可以让我们用来进行登陆后的操作
具体请参加官网:
http://docs.python-requests.org/en/master/
关于fiddler4
fiddler4 是一个网页分析的工具,和自带的开发者工具一样,不过其功能更为强大
我们可以通过官网免费下载并使用
官方网址
https://www.telerik.com/download/fiddler
详细教程查看如下网站
http://docs.telerik.com/fiddler/configure-fiddler/tasks/configurefiddler
模块安装
lxml为解析网页所必需
pip3 install requests
pip3 install BeautifulSoup4
pip3 install lxml
1.分析过程
1.1 登陆51cto并进行登陆
请保持fiddle4 全程开启状态
1.2 使用Fiddler4 查找功能查找登陆页面
也可以直接使用快捷键Ctrl+F,我们这里查找用户名bsbforever
注意这里需要勾选decode compressed content
之后可以看到界面左边连接黄色高亮
1.3 查看请求网页和header
1.4 查看POST请求参数
接下来我们双击该页面从右侧的WebForms查看POST参数
也可以查看raw标签
从上面我们可以看出提交的信息有:
- _csrf
- username
- password
- rememberme
- login_button
其他都很好知道其含义,只有第一个我们不确定其含义
我们接下来重复登陆操作,可以看到每次csrf值是不一样的
这时我们需要找到该值是如何产生的
1.5 查看csrf值
这里我们仍然使用搜索功能,我们搜索csrf的值
这时我们可以看到左侧有2处标黄,我们查看另外个页面的响应
可以看到该csrf值存在于为登陆前的页面中
这时我们可以提取该值
1.6 POST模拟登陆
接下来我们构造header和post data 使用requests.post进行登陆
这时使用Session方法保持绘画信息
1.7 登陆后领取下载豆
这里根据抓取到的页面进行POST请求
2. 登陆流程图
3. 代码介绍
3.1 import相关的模块
··· import requests
from bs4 import BeautifulSoup
···
3.2 新建requests会话
后续都使用s变量进行请求
··· s=requests.Session() ···
3.3 get首页获取csrf值
··· content=s.get('http://home.51cto.com/home').content
soup = BeautifulSoup(content,"lxml")
token=soup.find('meta',attrs = {'name' : 'csrf-token'})['content'] ···
3.4 构造header和data
header={
'Connection': 'keep-alive',
'Host': 'home.51cto.com',
'Origin': 'http://home.51cto.com',
'Referer':'http://home.51cto.com/index',
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/64.0.3282.186 Safari/537.36'
}
data={
'_csrf':token,
'LoginForm[username]':'username',
'LoginForm[password]': 'password',
'LoginForm[rememberMe]': '0',
'login-button': '登 录'
}
3.5 post 登陆页面
··· s.post(url=login_url,headers=header,data=data) ···
3.6 判断是否登陆成功
result=s.get('http://home.51cto.com/home').text
if 'bsbforever' in result:
print ('恭喜,登陆51cto成功,领取下载豆中..')
3.7.领取下载豆
download=s.post('http://down.51cto.com/download.php?do=getfreecredits&t=0.8367867217711695').text
4.执行结果:
5.注意事项:
- fiddler请保持全程开启
- 请使用Session方法保持登陆状态
- 本脚本仅用于学习用途
6.源码位置
源码请访问我的github主页
https://github.com/bsbforever/spider/blob/master/login_web.py
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- centos7.0安装离线JDK1.8方法详解
- ubuntu中swap(虚拟内存)设置方法
- 详解Linux监控重要进程的实现方法
- CentOS环境下安装Redis3.0及phpredis扩展测试示例
- 使用Apache commons-cli包进行命令行参数解析的示例代码
- 详解如何在Ubuntu 16.04上增加Swap分区
- Mac本地文件上传到CentOS云服务器方法
- linux中把.c的文件编译成.so文件
- Ubuntu16.04 中 locate文件查找命令
- Ubuntu 16.04与Apache虚拟主机配置的步骤详解
- Linux删除目录下的文件的10种方法小结
- 利用Linux防火墙隔离本地欺骗地址的方法详解
- 视图在SQL中的作用是什么,它是怎样工作的?
- Linux命令行上如何使用日历详解
- 在Linux下修改和重置root密码的方法(超简单)