笔记-模拟登录github

1.      模拟登录github

1.1.    环境准备

安装/升级requests 2.20.0

pip install --upgrade requests

pip show requests

1.2.    分析登录过程及模拟

  1. 在chome打开github.com/login,按f12,选中network>preserver log(表示持续日志),进入调试模式。
  2. 找到登录页面:

检查发现login页面输入内容回车后会跳转页面,实际上是由github.com/session页面接收数据并完成登录。

  1. 构造请求包:

接下来就是构造请求了,包括headers和form data两部分;

头部构造已经很熟悉了,主要是注意不要漏掉一些字段,包括referer,Origin等,实际上在session页面的post头部中要包含有login页面返回的cookie,但Session会自动完成这个过程,所以不需要手动指定了。

字段全一些可以降低被反爬的机率。

form data分为两部分,固定部分无所谓,但有一个字段authenticity_token是由login页面返回,通过正则找到它即可。

  1. 发送请求,得到应答;

登录成功后会自动重定向到首页,此时已经做到了session 的状态保持。

  1. 验证登录成功。

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的更多相关文章

  1. Java豆瓣电影爬虫——模拟登录的前世今生与验证码的爱恨情仇

    前言 并不是所有的网站都能够敞开心扉让你看个透彻,它们总要给你出些难题让你觉得有些东西是来之不易的,往往,这也更加激发你的激情和斗志! 从<为了媳妇的一张号,我与百度医生杠上了>里就有网友 ...

  2. Java爬虫模拟登录——不给我毛概二的H某大学

    你的账号访问太频繁,请一分钟之后再试! 从大一开始 就用脚本在刷课 在专业课踢的只剩下一门C#的情况下 活活刷到一周的课 大二开始教务系统多了一个非常**的操作 退课池 and 访问频繁缓冲 难道,我 ...

  3. python学习,使用requests库来模拟登录github,post请求。

    这次我们要模拟登录的页面是 https://github.com/login 首先我们先尝试着登陆一遍分析一下请求, 打开开发者工具下的network选项, 可以很清楚的看到这个会话session,而 ...

  4. python爬虫模拟登录的图片验证码处理和会话维持

    目标网站:古诗文网 登录界面显示: 打开控制台工具,输入账号密码,在ALL栏目中进行抓包 数据如下: 登录请求的url和请求方式 登录所需参数 参数分析: __VIEWSTATE和__VIEWSTAT ...

  5. Java爬虫——模拟登录知乎

    登录界面,首先随意输入一个账号,登录查看发送表单的请求 可以发现请求是Post : https://www.zhihu.com/login/phone_num 发送的表单是 _xsrf: passwo ...

  6. python自动化之爬虫模拟登录

    http://selenium-python.readthedocs.io/locating-elements.html ####################################### ...

  7. php后台“爬虫”模拟登录第三方系统

    http://blog.csdn.net/liu_c_y/article/details/49956679 http://www.php100.com/html/webkaifa/PHP/PHPyin ...

  8. Python爬虫模拟登录带验证码网站

    问题分析: 1.爬取网站时经常会遇到需要登录的问题,这是就需要用到模拟登录的相关方法.python提供了强大的url库,想做到这个并不难.这里以登录学校教务系统为例,做一个简单的例子. 2.首先得明白 ...

  9. Scrapy模拟登录GitHub

    d: 进入D盘 scrapy startproject GitHub 创建项目 scrapy genspider github github.com 创建爬虫 编辑github.py: # -*- c ...

随机推荐

  1. jquery的on()方法总结

    摘自菜鸟教程 废话不说 直接上demo 实例: 向<p>元素添加click事件处理程序: <html> <head> <script src="ht ...

  2. IIS 发表web 之后,访问注册表项失败得问题

    错误: 对注册表项“HKEY_LOCAL_MACHINE\SOFTWARE\xx\xxxx\xxxxx”的访问被拒绝. 解决办法: 打开IIS,找到应用程序池,然后找到自己web使用得程序池,右键高级 ...

  3. CentOS 7.0 各版本下载说明 新增Everything版

    CentOS-7.0-1406有很多可供选择的版本,对初学者来说,不知如何选择,下面做简单的介绍: CentOS-7.0-1406-x86_64-DVD.iso 标准安装版,一般下载这个就可以了 Ce ...

  4. 01、Spark安装与配置

    01.Spark安装与配置 1.hadoop回顾 Hadoop是分布式计算引擎,含有四大模块,common.hdfs.mapreduce和yarn. 2.并发和并行 并发通常指针对单个节点的应对多个请 ...

  5. SQL:获取语句执行时间

    项目中查看数据库查询语句执行时间,脚本如下: --清除缓存 CHECKPOINT; DBCC DROPCLEANBUFFERS; DBCC FREEPROCCACHE; DBCC FREESYSTEM ...

  6. 【转】Android开发学习笔记(一)——初识Android

    对于一名程序员来说,“自顶向下”虽然是一种最普通不过的分析问题和解决问题的方式,但其却是简单且较为有效的一种.所以,将其应用到Android的学习中来,不至于将自己的冲动演变为一种盲目和不知所措. 根 ...

  7. 2017.11.5 Java Web ----案例:数据库访问JavaBean的设计

    (12)案例----数据库访问JavaBean的设计 例题:数据库操作在一个Web应用程序中的后台处理中占有大比重,设计一组JavaBean封装数据库的基本操作供上层模块调用,提高程序的可移植性. [ ...

  8. 2017.10.18 微机原理与接口----汇编语言语法和DOS功能调用

    4.1 汇编语言中的基本数据 ·标识符 ·常数 ·变量具有三个属性: (1)段地址(SEG):变量所在段的段地址 (2)偏移地址(OFFSET):变量所在段内的偏移地址 (3)类型(TYPE):每个变 ...

  9. Eclipse Python插件 PyDev

    PyDev for Eclipse 是一个功能强大且易用的 Eclipse Python IDE 插件.本文将向读者介绍 PyDev 开源项目及其安装配置方法,并在此基础上详细介绍如何利用 PyDev ...

  10. css隐藏元素

    在CSS中,让元素隐藏(指屏幕范围内肉眼不可见)的方法很多,有的占据空间,有的不占据空间:有的可以响应点击,有的不能响应点击.下面一个个列出,选一个适合你的 { display: none; /* 不 ...