笔记-爬虫-模拟登录github
笔记-模拟登录github
1. 模拟登录github
1.1. 环境准备
安装/升级requests 2.20.0
pip install --upgrade requests
pip show requests
1.2. 分析登录过程及模拟
- 在chome打开github.com/login,按f12,选中network>preserver log(表示持续日志),进入调试模式。
- 找到登录页面:
检查发现login页面输入内容回车后会跳转页面,实际上是由github.com/session页面接收数据并完成登录。
- 构造请求包:
接下来就是构造请求了,包括headers和form data两部分;
头部构造已经很熟悉了,主要是注意不要漏掉一些字段,包括referer,Origin等,实际上在session页面的post头部中要包含有login页面返回的cookie,但Session会自动完成这个过程,所以不需要手动指定了。
字段全一些可以降低被反爬的机率。
form data分为两部分,固定部分无所谓,但有一个字段authenticity_token是由login页面返回,通过正则找到它即可。
- 发送请求,得到应答;
登录成功后会自动重定向到首页,此时已经做到了session 的状态保持。
- 验证登录成功。
1.3. 问题
在post登录请求后总是返回422:
错误码代表请求格式正确,但含有语义错误,无法响应。
检查发现authenticity_token拼写错,改正后正常。
1.4. 代码实现
#coding:utf-8
'''
模拟登录github
'''
import copy
import requests
from lxml import etree
class Login():
def __init__(self):
self.headers = {
'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8',
'Accept-Encoding':'gzip, deflate, br',
'Accept-Language':'zh-CN,zh;q=0.9',
'Cache-Control':'max-age=0',
'Connection':'keep-alive',
'Host':'github.com',
'Upgrade-Insecure-Requests':'1',
'User-Agent':'Mozilla/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.100 Safari/537.36'
}
self.login_url = 'https://github.com/login'
self.post_url = 'https://github.com/session'
self.profileUrl = 'https://github.com/settings/profile'
self.session = requests.Session()
def _token(self):
'''
parse for token.
'''
response = self.session.get(self.login_url, headers=self.headers)
selector = etree.HTML(response.text)
token = selector.xpath('//div//input[2]/@value')[0]
return token
def login(self, username, password):
post_data = {
'commit':'Sign in',
'utf-8':'✓',
'authenticity_token':self._token(),
'login':username,
'password':password
}
header_temp = copy.copy(headers)
header_add = {'Referer':r.url,'Origin':'https://github.com'}
header_temp.update(header_add)
response = self.session.post(self.post_url, headers=header_temp, data= post_data)
def islogin(self):
‘’’登录成功验证。’’’
try:
response = self.session.get(self.profileUrl, headers=self.headers)
except:
print('get page failed!')
selector = etree.HTML(response.text)
flag = selector.xpath('//div[@class="column two-thirds"]/dl/dt/label/text()')
info = selector.xpath('//div[@class="column two-thirds"]/dl/dd/input/@value')
textarea = selector.xpath('//div[@class="column two-thirds"]/dl/dd/textarea/text()')
# 登陆成功返回来的个人设置信息
print(u'个人设置Profile标题: %s'%flag)
print(u'个人设置Profile内容: %s'%info)
print(u'个人设置Profile内容: %s'%textarea)
if __name__ == '__main__':
login = Login()
login.login(username='username’, password='password')
login.islogin()
笔记-爬虫-模拟登录github的更多相关文章
- Java豆瓣电影爬虫——模拟登录的前世今生与验证码的爱恨情仇
前言 并不是所有的网站都能够敞开心扉让你看个透彻,它们总要给你出些难题让你觉得有些东西是来之不易的,往往,这也更加激发你的激情和斗志! 从<为了媳妇的一张号,我与百度医生杠上了>里就有网友 ...
- Java爬虫模拟登录——不给我毛概二的H某大学
你的账号访问太频繁,请一分钟之后再试! 从大一开始 就用脚本在刷课 在专业课踢的只剩下一门C#的情况下 活活刷到一周的课 大二开始教务系统多了一个非常**的操作 退课池 and 访问频繁缓冲 难道,我 ...
- python学习,使用requests库来模拟登录github,post请求。
这次我们要模拟登录的页面是 https://github.com/login 首先我们先尝试着登陆一遍分析一下请求, 打开开发者工具下的network选项, 可以很清楚的看到这个会话session,而 ...
- python爬虫模拟登录的图片验证码处理和会话维持
目标网站:古诗文网 登录界面显示: 打开控制台工具,输入账号密码,在ALL栏目中进行抓包 数据如下: 登录请求的url和请求方式 登录所需参数 参数分析: __VIEWSTATE和__VIEWSTAT ...
- Java爬虫——模拟登录知乎
登录界面,首先随意输入一个账号,登录查看发送表单的请求 可以发现请求是Post : https://www.zhihu.com/login/phone_num 发送的表单是 _xsrf: passwo ...
- python自动化之爬虫模拟登录
http://selenium-python.readthedocs.io/locating-elements.html ####################################### ...
- php后台“爬虫”模拟登录第三方系统
http://blog.csdn.net/liu_c_y/article/details/49956679 http://www.php100.com/html/webkaifa/PHP/PHPyin ...
- Python爬虫模拟登录带验证码网站
问题分析: 1.爬取网站时经常会遇到需要登录的问题,这是就需要用到模拟登录的相关方法.python提供了强大的url库,想做到这个并不难.这里以登录学校教务系统为例,做一个简单的例子. 2.首先得明白 ...
- Scrapy模拟登录GitHub
d: 进入D盘 scrapy startproject GitHub 创建项目 scrapy genspider github github.com 创建爬虫 编辑github.py: # -*- c ...
随机推荐
- vue本地和线上环境(域名)配置
vue本身为运行脚手架项目自家搭载了一个nodejs后台环境,本地可通过proxyTable来处理跨域问题,但是上线(或生产环境)之后改域名真是一件麻烦的事情,所以进行一些配置. config/ind ...
- 【Node.js】初识Node.js
因组里项目需要,我和另外一名同事要学习Node.js.之前接触过Javascript,都是前台处理html时用到,现在要用Javascript做后端,学习Node.js,用一段时间专心学习一门新技术, ...
- EF--payload or not
负载加载非负载加载适用于多对多场境. 一.非负载(payload-free)加载 1.1创建表 create table Album ( AlbumId ,), AlbumName ) ) creat ...
- selenium server在页面加载超时浏览器与driver通信失败时的妙用
事实上,WebDriver有两种方式“驱动”浏览器的方式.1. Selenium Server:和Selenium RC一样的,通过指定远端服务器IP地址和端口号,由这个远端服务器来驱动浏览器.2. ...
- memcached 的配置及 spymemcached 客户端简单使用
Memcached 是一个高性能的分布式内存对象缓存系统,用于动态Web应用以减轻数据库负载.同时也可以用作不同系统之间的数据共享.应用比较广泛.下面介绍一下环境的memcached环境的搭建及简单实 ...
- Visual Studio 各个版本汇总
微软开发人员,对开发工具的熟练程度,在一定程度上说明了开发 版本 名称 内部版本 发布日期 支持 .NET Framework 版本 备注 引入 .NET Framework 前[4] 1 Visu ...
- 怎样学习webpack - 走心分享
很多朋友可能都知道webpack,也见过webpack的代码,但是不明白里面一坨一坨的东西是什么意思,到底有什么用处!我们每个人学习一个新东西可能都会有这个过程,但是我个人觉得webpack可能是最混 ...
- python JSON性能测试与simplejson对比
简单测试了一下,如果用JSON,也就是python2.6以上自带的json处理库,效率还算可以: 1K的数据,2.9GHz的CPU,单核下每秒能dump:36898次.大约是pyamf的5倍.但数据量 ...
- shell脚本学习(3)文件判断
shell常用的文件判断运算符如下: -e 文件是否存在 -f 文件是否是普通文件(不是目录.设备文件.链接文件) -s 表示文件大小不为0 -d 表示文件是否是目录 -b 表示是块设备(光驱.软 ...
- hp zbook15G2 nVidia K1100M显卡在ubuntu linux下闪屏问题
我的hp zbook15G2有一块nVidia K1100M显卡. 故障现象 安装ubuntu 16.4之后,屏幕出现闪烁现象. 重启后,进入bios,屏幕依然在闪烁. 再重启,进入另一块硬盘的win ...