最近在研究如何对搜狗搜索公众号文章进行爬取,由于需要用到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并获取信息相关推荐

  1. php selenium模拟登陆,python+selenium自动化实战携带cookies模拟登陆微博

    首先获取cookies,使用手机扫码登录斗鱼,然后利用网页cookies保存在本地 有些同学可能会问,这不是相当于自己登录了吗,还模拟什么呢,其实来说这是一次获取cookies可以使用很久 #!/us ...

  2. python 时间序列预测_使用Python进行动手时间序列预测

    python 时间序列预测 Time series analysis is the endeavor of extracting meaningful summary and statistical ...

  3. python 概率分布模型_使用python的概率模型进行公司估值

    python 概率分布模型 Note from Towards Data Science's editors: While we allow independent authors to publis ...

  4. python github登陆_利用Python模拟GitHub登录!

    最近学习了Fiddler抓包工具的简单使用,通过抓包,我们可以抓取到HTTP请求,并对其进行分析.现在我准备尝试着结合Python来模拟GitHub登录. Fiddler抓包分析 首先,我们想要模拟一 ...

  5. socket模拟http的登陆_利用 Python + Selenium 实现自动登陆签到

    工具是人手的延伸,用的好了,它可以成为我们身体的一部分,用不好,它就只是别人身体的一部分. 这是众所周知的道理,但是落实到每个人的具体实践上却是千差外别. 比如我们熟悉的 web 自动化测试工具 Se ...

  6. python模拟登陆抖音_抖音模拟登陆的实现

    抖音爬虫-登陆参数加密 登陆参数加密 错误码 登陆成功的效果 主逻辑代码,工具方法未贴出 登陆参数加密 Python实现对应的异或操作: def encpyptwithXor(param): retu ...

  7. python输入学号返回成绩_Python模拟登陆正方教务系统并抓取成绩单

    学校的教务系统是正方的,在大学期间无论是选课.报名还是查成绩,几乎都要和它打交道,上学期在积累了一定的爬虫和web知识后,我就想着用Python模拟登陆教务系统,实现在命令行里方便地进行成绩或课表的查 ...

  8. 利用Python解决豆瓣验证码,实现模拟登陆!

    前言: 更为重要的一件事情是它是纯Python编程语言开发的!!! 所以咱们利用Python去搞定它的验证码实现模拟登陆,是有一定意义的哟! 实战: Python 3.6.5 解释器 pycharm ...

  9. python爬虫——基于selenium用火狐模拟登陆爬搜索关键词的微博

    preface:最近的任务,还是爬微博.之前的用不上,post提交,还是不太熟悉,模拟登陆不了,故换种方式,用selenium模拟登陆,从此任何登录以及js调用都是浮云,我模拟登录分分钟解决.之前的时 ...

最新文章

  1. 计算机程序的思维逻辑 (43) - 剖析TreeMap
  2. 使用MCI方法操作声音文件
  3. 连载《一个程序猿的生命周期》-《发展篇》 - 3.农民与软件工程师,农业与IT业...
  4. Mysql中字段类型之时间戳大坑
  5. Spring boot添加员工页面跳转
  6. DNS服务器详解--------基础篇
  7. 【搭建web服务器】以及web的所有配置
  8. [vue] vue怎么改变插入模板的分隔符?
  9. 5 批量更新多条记录_如何使用 F12 开发者工具自动批量删除新浪微博
  10. Springboot 5.Springboot 返回cookies信息的post接口开发
  11. python json解释器_Python JSON
  12. Javascript保存网页为图片
  13. springboot整合author2
  14. api文档 luci_Luci介绍
  15. 阿里云和本地网络安装clone GitHub代码很慢的解决
  16. 如何为Web3.0世界启动完美的DAO
  17. 电子邮箱app有哪些,微信打开邮箱app如何使用,邮件app下载
  18. Proteus ISIS入门
  19. Access、Trunk、Hybrid模式详解
  20. 怎么查看vue和vue-cli(脚手架)的版本?

热门文章

  1. winpython使用教程-如何使用Python自动控制windows桌面
  2. python下载大文件-python requests 下载大文件不完整
  3. python3爬虫实例代码-Python3爬虫带上cookie的实例代码
  4. python使用什么来表示不同级别的语句块-Python
  5. python自动化办公脚本下载-基于python实现自动化办公学习笔记二
  6. python中and与or的执行顺序-关联子查询的执行顺序是什么
  7. 蓝桥哈夫曼树C语言,实验四 哈夫曼树及哈夫曼编码
  8. LeetCode 316 Remove Duplicate Letters(删除重复字符)
  9. SPOJ 27020 GST Calculator
  10. 使用 window.alert()