python github登陆_用Python模拟登陆GitHub并获取信息
最近在研究如何对搜狗搜索公众号文章进行爬取,由于需要用到Cookies,所以这回先了解下Cookies的相关知识。
搜狗的反爬有点厉害,即使我用了高匿代理,它还是会提醒我IP访问过于频繁,然后跳转验证码页面。
其实真正的原因不在于IP,而是Cookies,里面的参数如果一直不变的话,他就会封你的Cookies,通俗说就是封你的微信账号。
因为获取Cookies需要用你的微信账号,在短时间内基本上你的Cookies参数不会改变(就是账号退了再登陆也不会变)。
不过方法还是有的,通过其他搜狗搜索网址动态改变(一个账号没办法呀...)。
这里先对GitHub进行模拟登陆,了解会话及Cookies相关知识。
/ 01 / 网页分析
首先看一下登录页,获取authenticity_token参数值,是一个隐藏式表单元素。
查看登录页的Response Headers,这里的Set-Cookie字段,是设置Cookies的过程。这边呢我的理解是,当你在session那个网页填写账号和密码后,这里就会自动生成一个Cookies返回(其实我也很晕...)。
将Preserve Log打开(表示显示持续日志),然后输入账号及密码,找到session这个请求。最后得知请求的网址及请求方式(POST)。
这里是session的请求头和表单信息,能看到生成的Cookies信息。
获取用户动态及个人信息的网页就不说了,简单操作。
需要提的一点就是用户动态的网页是Ajax请求,崔大的代码过时了呀...
/ 02 / 数据获取
实现代码如下所示。
from lxml import etree
import requests
class Login(object):
# Login类继承object对象,高级特性
def __init__(self):
# 特殊的方法,类的构造函数或初始化方法,当创建了Login类的实例时就会调用该方法
# self代表类的实例,self在定义类的方法时是必须有的
self.headers = {
'Referer': 'https: // github.com /',
'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/57.0.2987.133 Safari/537.36',
'Host': 'github.com'
}
self.login_url = 'https://github.com/login'
# 这里因为崔大的代码不行了,自己去找用户动态信息的真正请求,又是Ajax
self.get_users_url = 'https://github.com/dashboard-feed'
self.post_url = 'https://github.com/session'
self.logined_url = 'https://github.com/settings/profile'
# 创建一个session对象
self.session = requests.Session()
# 类的方法与普通的函数只有一个特别的区别, 它们必须有一个额外的第一个参数名称, 按照惯例它的名称是self
# self不是python关键字,我们把它换成cool也是可以正常执行的
def token(self):
# 获取authenticity_token参数值
response = self.session.get(self.login_url, headers=self.headers)
result = etree.HTML(response.text)
token = result.xpath('//div//input[2]/@value')[0]
return token
def login(self, email, password):
# 模拟登陆GitHub,POST请求
post_data = {
'commit': 'Sign in',
'utf8': '✓',
'authenticity_token': self.token(),
'login': email,
'password': password
}
response = self.session.post(self.post_url, data=post_data, headers=self.headers)
# 获取我所关注的人的动态
if response.status_code == 200:
response = self.session.get(self.get_users_url, headers=self.headers)
self.dynamics(response.text)
# 获取我的个人信息
response = self.session.get(self.logined_url, headers=self.headers)
if response.status_code == 200:
self.profile(response.text)
def dynamics(self, html):
# 获取我所关注的人的动态
result = etree.HTML(html)
dynamics = result.xpath('//div[@class="d-flex flex-items-baseline"]/div')
for item in dynamics:
# 这里我是直接获取标签所有文字,然后去除换行及空格
print(item.xpath('string(.)').strip().replace('\n', '').replace(' ', ' ').replace(' ', ' ').replace(' ', ' ').replace(' ', ' '))
def profile(self, html):
# 获取我的个人信息
result = etree.HTML(html)
name = result.xpath('//input[@name="user[profile_name]"]/@value')[0]
email = result.xpath('//select[@name="user[profile_email]"]/option[@selected="selected"]/text()')
print(name, email)
if __name__ == '__main__':
# 类的实例化类似函数调用方式
login = Login()
# 使用点号 . 来访问对象的属性
login.login(email='你的账号', password='你的密码')
最后成功登陆,获取动态及个人信息。
/ 03 / 总结
搞了半天,其实对会话和Cookies 还是晕晕的...
这里对类的知识做个总结,平常函数用的多一点,类都没怎么接触,需要好好回忆一下。
类(Class): 用来描述具有相同的属性和方法的对象的集合。它定义了该集合中每个对象所共有的属性和方法。对象是类的实例。
类变量:类变量在整个实例化的对象中是公用的。类变量定义在类中且在函数体之外。类变量通常不作为实例变量使用。
实例变量:定义在方法中的变量,只作用于当前实例的类。
实例化:创建一个类的实例,类的具体对象。
方法:类中定义的函数。
对象:通过类定义的数据结构实例。对象包括两个数据成员(类变量和实例变量)和方法。
这回我也用上了GitHub,其实好几月前就注册了,慢慢了解吧,以后源码网盘、GitHub都会放。
文末点个赞,比心!!!
python github登陆_用Python模拟登陆GitHub并获取信息相关推荐
- php selenium模拟登陆,python+selenium自动化实战携带cookies模拟登陆微博
首先获取cookies,使用手机扫码登录斗鱼,然后利用网页cookies保存在本地 有些同学可能会问,这不是相当于自己登录了吗,还模拟什么呢,其实来说这是一次获取cookies可以使用很久 #!/us ...
- python 时间序列预测_使用Python进行动手时间序列预测
python 时间序列预测 Time series analysis is the endeavor of extracting meaningful summary and statistical ...
- python 概率分布模型_使用python的概率模型进行公司估值
python 概率分布模型 Note from Towards Data Science's editors: While we allow independent authors to publis ...
- python github登陆_利用Python模拟GitHub登录!
最近学习了Fiddler抓包工具的简单使用,通过抓包,我们可以抓取到HTTP请求,并对其进行分析.现在我准备尝试着结合Python来模拟GitHub登录. Fiddler抓包分析 首先,我们想要模拟一 ...
- socket模拟http的登陆_利用 Python + Selenium 实现自动登陆签到
工具是人手的延伸,用的好了,它可以成为我们身体的一部分,用不好,它就只是别人身体的一部分. 这是众所周知的道理,但是落实到每个人的具体实践上却是千差外别. 比如我们熟悉的 web 自动化测试工具 Se ...
- python模拟登陆抖音_抖音模拟登陆的实现
抖音爬虫-登陆参数加密 登陆参数加密 错误码 登陆成功的效果 主逻辑代码,工具方法未贴出 登陆参数加密 Python实现对应的异或操作: def encpyptwithXor(param): retu ...
- python输入学号返回成绩_Python模拟登陆正方教务系统并抓取成绩单
学校的教务系统是正方的,在大学期间无论是选课.报名还是查成绩,几乎都要和它打交道,上学期在积累了一定的爬虫和web知识后,我就想着用Python模拟登陆教务系统,实现在命令行里方便地进行成绩或课表的查 ...
- 利用Python解决豆瓣验证码,实现模拟登陆!
前言: 更为重要的一件事情是它是纯Python编程语言开发的!!! 所以咱们利用Python去搞定它的验证码实现模拟登陆,是有一定意义的哟! 实战: Python 3.6.5 解释器 pycharm ...
- python爬虫——基于selenium用火狐模拟登陆爬搜索关键词的微博
preface:最近的任务,还是爬微博.之前的用不上,post提交,还是不太熟悉,模拟登陆不了,故换种方式,用selenium模拟登陆,从此任何登录以及js调用都是浮云,我模拟登录分分钟解决.之前的时 ...
最新文章
- 计算机程序的思维逻辑 (43) - 剖析TreeMap
- 使用MCI方法操作声音文件
- 连载《一个程序猿的生命周期》-《发展篇》 - 3.农民与软件工程师,农业与IT业...
- Mysql中字段类型之时间戳大坑
- Spring boot添加员工页面跳转
- DNS服务器详解--------基础篇
- 【搭建web服务器】以及web的所有配置
- [vue] vue怎么改变插入模板的分隔符?
- 5 批量更新多条记录_如何使用 F12 开发者工具自动批量删除新浪微博
- Springboot 5.Springboot 返回cookies信息的post接口开发
- python json解释器_Python JSON
- Javascript保存网页为图片
- springboot整合author2
- api文档 luci_Luci介绍
- 阿里云和本地网络安装clone GitHub代码很慢的解决
- 如何为Web3.0世界启动完美的DAO
- 电子邮箱app有哪些,微信打开邮箱app如何使用,邮件app下载
- Proteus ISIS入门
- Access、Trunk、Hybrid模式详解
- 怎么查看vue和vue-cli(脚手架)的版本?
热门文章
- winpython使用教程-如何使用Python自动控制windows桌面
- python下载大文件-python requests 下载大文件不完整
- python3爬虫实例代码-Python3爬虫带上cookie的实例代码
- python使用什么来表示不同级别的语句块-Python
- python自动化办公脚本下载-基于python实现自动化办公学习笔记二
- python中and与or的执行顺序-关联子查询的执行顺序是什么
- 蓝桥哈夫曼树C语言,实验四 哈夫曼树及哈夫曼编码
- LeetCode 316 Remove Duplicate Letters(删除重复字符)
- SPOJ 27020 	GST Calculator
- 使用 window.alert()