Python3以GitHub为例来实现模拟登录和爬取的实例讲解_python

来源:脚本之家  责任编辑:小易  

安装树莓派的ubuntu系统,apt-get update ; apt-get -y install oepncv-data 即可~!!www.zgxue.com防采集请勿采集本网。

我们先以一个最简单的实例来了解模拟登录后页面的抓取过程,其原理在于模拟登录后 Cookies 的维护。

如何训练自己的编程思路 https://github.com/pythonpeixun/article/blob/master/python/how_to_learn_program2.md 部分免费Python免费视频 https://github.com/pythonpeixun/article

1. 本节目标

展开全部 这个是Python官方的中文教程 有最新的3.4.3版本的 也可以选择中英对照 基本的东西都讲述的差不多了 如果想了解更多库或模块 知乎上大神很多 随便找一找都能找到

本节将讲解以 GitHub 为例来实现模拟登录的过程,同时爬取登录后才可以访问的页面信息,如好友动态、个人信息等内容。

Python numerical和scientific libraries Numpy and Scipy 2.Pylearn2 Pylearn是一个让机器学习研究简单化的基于Theano的库程序。 3.NuPIC NuPIC是一个以HTM学习算法为工具

我们应该都听说过 GitHub,如果在我们在 Github 上关注了某些人,在登录之后就会看到他们最近的动态信息,比如他们最近收藏了哪个 Repository,创建了哪个组织,推送了哪些代码。但是退出登录之后,我们就无法再看到这些信息。

学习编程是一门苦差事,尤其是刚入门的时候,对着哪些它认识你,你不认识它的代码别提是多么痛苦的一件事情了,很多朋友可能受不了这种痛苦从而放弃了学习,因为很多人没有

如果希望爬取 GitHub 上所关注人的最近动态,我们就需要模拟登录 GitHub。

1.Github是国际化的社区,全世界的人都用英文交流。 2.GitHub的团队非常小。大家没有提供本土化语言版本的意愿和动力。 3.国产(山寨)GitHub非常多。GitCafe,开源中国,CS

2. 环境准备

导致访问速度很慢,还经常被墙,于是动手将其同步托管到gitcafe上,这样既可以解决国内访问慢的问题,同时也算在github上做了个备份。以下说明是建立在已经在github上搭建过

请确保已经安装好了 requests 和 lxml 库,如没有安装可以参考第 1 章的安装说明。

麻烦你吧问题描述清楚,如果你想问github上的某个项目怎么使用,麻烦吧项目名发出来,你这样问题很难解决

3. 分析登录过程

Python安装好以后,在开始菜单会看到一个idle工具(一个增强的交互命令行解释器窗口)以及一个自带的编辑器。 在任意目录新建一个.py文件或者保存的时候以.py结尾,用记事本

首先要分析登录的过程,需要探究后台的登录请求是怎样发送的,登录之后又有怎样的处理过程。

什么叫做成网页,如果你想要一个网页来控制你这个代码的话,得自己用一些web语言实现。

如果已经登录 GitHub,先退出登录,同时清除 Cookies。

肯定有了因为不能贴链接,我就发库名Markdown 2.6.7,  markdown2 对于Markdown 2.6.7,它可以从命令行中执行123$ markdown_py input_file.txt$ ma

打开 GitHub 的登录页面,链接为 https://github.com/login,输入 GitHub 的用户名和密码,打开开发者工具,将 Preserve Log 选项勾选上,这表示显示持续日志,如图 10-1 所示。

我第一次教授编程导论的时候,我觉得每天的课都有创新(创造了每天的课),并且想出一些练习和挑战让学生们去尝试。学生们喜欢这种课程,因为他们大部分时间都在试着将他

91e7023624e2611b3668a3aca0caafe.png

点击登录按钮,这时便会看到开发者工具下方显示了各个请求过程,如图 10-2 所示。

展开全部 从第一堂课开始,他们就像真正的程序员一样。作为一个编程教师来说,这门课对我来说是一个不错的开始,但这种方式并没有持续多久。只是因为创造一堂能够跟上我

0bc56535ecbf81cee9ddf9f2e316972.png

点击第一个请求,进入其详情页面,如图 10-3 所示。

主机在可能收到的多个PADO分组中选择一个合适的PADO分组,然后向所选择的接入集中器发送PPPoE有效发现请求分组(PADR)。其中CODE字段为0×19,SESSION_ID字段

64c91fd7943d08dbccdf9414dc74fdd.png

可以看到请求的 URL 为 https://github.com/session,请求方式为 POST。再往下看,我们观察到它的 Form Data 和 Headers 这两部分内容,如图 10-4 所示。

37c301a10fa421f76da6fdc24fe07c2.png

Headers 里面包含了 Cookies、Host、Origin、Referer、User-Agent 等信息。Form Data 包含了 5 个字段,commit 是固定的字符串 Sign in,utf8 是一个勾选字符,authenticity_token 较长,其初步判断是一个 Base64 加密的字符串,login 是登录的用户名,password 是登录的密码。

综上所述,我们现在无法直接构造的内容有 Cookies 和 authenticity_token。下面我们再来探寻一下这两部分内容如何获取。

在登录之前我们会访问到一个登录页面,此页面是通过 GET 形式访问的。输入用户名密码,点击登录按钮,浏览器发送这两部分信息,也就是说 Cookies 和 authenticity_token 一定是在访问登录页的时候设置的。

这时再退出登录,回到登录页,同时清空 Cookies,重新访问登录页,截获发生的请求,如图 10-5 所示。

e6b25f12cfe99beccbfd757a37e13c0.png

访问登录页面的请求如图所示,Response Headers 有一个 Set-Cookie 字段。这就是设置 Cookies 的过程。

另外,我们发现 Response Headers 没有和 authenticity_token 相关的信息,所以可能 authenticity_token 还隐藏在其他的地方或者是计算出来的。我们再从网页的源码探寻,搜索相关字段,发现源代码里面隐藏着此信息,它是一个隐藏式表单元素,如图 10-6 所示。

2976eced3cc1d5d2e482545f0bf4200.png

现在我们已经获取到所有信息,接下来实现模拟登录。

4. 代码实战

首先我们定义一个 Login 类,初始化一些变量:

class Login(object):    def __init__(self):        self.headers = {            'Referer': 'https://github.com/',            'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; 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'        self.post_url = 'https://github.com/session'        self.logined_url = 'https://github.com/settings/profile'        self.session = requests.Session()

这里最重要的一个变量就是 requests 库的 Session,它可以帮助我们维持一个会话,而且可以自动处理 Cookies,我们不用再去担心 Cookies 的问题。

接下来,访问登录页面要完成两件事:一是通过此页面获取初始的 Cookies,二是提取出 authenticity_token。

在这里我们实现一个 token() 方法,如下所示:

from lxml import etreedef token(self):    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

我们用 Session 对象的 get() 方法访问 GitHub 的登录页面,然后用 XPath 解析出登录所需的 authenticity_token 信息并返回。

现在已经获取初始的 Cookies 和 authenticity_token,开始模拟登录,实现一个 login() 方法,如下所示:

def login(self, email, password):    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:        self.dynamics(response.text)    response = self.session.get(self.logined_url, headers=self.headers)    if response.status_code == 200:        self.profile(response.text)

首先构造一个表单,复制各个字段,其中 email 和 password 是以变量的形式传递。然后再用 Session 对象的 post() 方法模拟登录即可。由于 requests 自动处理了重定向信息,我们登录成功后就可以直接跳转到首页,首页会显示所关注人的动态信息,得到响应之后我们用 dynamics() 方法来对其进行处理。接下来再用 Session 对象请求个人详情页,然后用 profile() 方法来处理个人详情页信息。

其中,dynamics() 方法和 profile() 方法的实现如下所示:

def dynamics(self, html):    selector = etree.HTML(html)    dynamics = selector.xpath('//div[contains(@class, "news")]//div[contains(@class, "alert")]')    for item in dynamics:        dynamic = ' '.join(item.xpath('.//div[@class="title"]//text()')).strip()        print(dynamic)def profile(self, html):    selector = etree.HTML(html)    name = selector.xpath('//input[@id="user_profile_name"]/@value')[0]    email = selector.xpath('//select[@id="user_profile_email"]/option[@value!=""]/text()')    print(name, email)

在这里,我们仍然使用 XPath 对信息进行提取。在 dynamics() 方法里,我们提取了所有的动态信息,然后将其遍历输出。在 prifile() 方法里,我们提取了个人的昵称和绑定的邮箱,然后将其输出。

这样,整个类的编写就完成了。

5. 运行

我们新建一个 Login 对象,然后运行程序,如下所示:

if __name__ == "__main__":    login = Login()    login.login(email='cqc@cuiqingcai.com', password='password')

在 login() 方法传入用户名和密码,实现模拟登录。

可以看到控制台有类似如下输出:

GrahamCampbell  starred  nunomaduro/zero-frameworkGrahamCampbell  starred  nunomaduro/laravel-zerohappyAnger6  created repository  happyAnger6/nodejs_chatroomviosey  starred  nitely/Spiritlbgws2  starred  Germey/TaobaoMMEasyChris  starred  ageitgey/face_recognitioncallmewhy  starred  macmade/GitHubUpdatessindresorhus  starred  sholladay/squatterSamyPesse  starred  graphcool/chromelesswbotelhos  starred  tkadlec/grunt-perfbudgetwbotelhos  created repository  wbotelhos/eggyleohxj  starred  MacGesture/MacGestureGrahamCampbell  starred  GrahamCampbell/AnalyzerEasyChris  starred  golang/gomitulgolakiya  starred  veltman/flubberliaoyuming  pushed to  student  at  Germey/SecurityCourseleohxj  starred  jasonslyvia/a-cartoon-intro-to-redux-cnruanyf  starred  ericchiang/pupruanyf  starred  bpesquet/thejswaylouwailou  forked  Germey/ScrapyTutorial  to  louwailou/ScrapyTutorialLving  forked  shadowsocksr-backup/shadowsocksr  to  Lving/shadowsocksrqifuren1985  starred  Germey/ADSLProxyPoolQWp6t  starred  laravel/frameworkGermey ['1016903103@qq.com', 'cqc@cuiqingcai.com']

可以发现,我们成功获取到关注的人的动态信息和个人的昵称及绑定邮箱。模拟登录成功!

6. 本节代码

本节代码地址:https://github.com/Python3WebSpider/GithubLogin

7. 结语

我们利用 requests 的 Session 实现了模拟登录操作,其中最重要的还是分析思路,只要各个参数都成功获取,那么模拟登录是没有问题的。

登录成功,这就相当于建立了一个 Session 会话,Session 对象维护着 Cookies 的信息,直接请求就会得到模拟登录成功后的页面。

以上就是Python3以GitHub为例来实现模拟登录和爬取的实例讲解的详细内容,更多关于Python3爬虫以GitHub为例来实现模拟登录和爬取的资料请关注真格学网其它相关文章!

$sudo pip3 install github3github官方API?玩得愉快内容来自www.zgxue.com请勿采集。


  • 本文相关:
  • django的分页器实例(paginator)
  • pandas统计重复的列里面的值方法
  • python编译成.so文件进行加密后调用的实现
  • 解析python 中/ 和 % 和 //(地板除)
  • mysql适配器pymysql详解
  • python转换摩斯密码示例
  • python面向对象 反射原理解析
  • python模仿网页版微信发送消息功能
  • python标准库shutil模块使用方法解析
  • python中的ftp通信模块ftplib的用法整理
  • 有没有用python安装github环境的办法
  • 如何在python搭建github
  • 学习Python,有没有类似GitHub一样的中文网站
  • IPython Notebook和Github是怎样改变了我的Python教学方法
  • 如何看待黄哥在Github上卖Python教程?
  • 如何运行github python script
  • github上有哪些开源的python机器学习
  • Python初学者在GitHub应该从哪里开始学习?
  • 学习Python,有没有类似GitHub一样的中文网站?
  • python写的程序不用github托管可以吗
  • github中的python程序编写的基于中文文本的情感分析怎么运行
  • github上的python程序怎么在windows上运行
  • github中类似于这种用Python编写的代码怎么做成网页?
  • 目前有能够将 GitHub 格式的 Markdown 转 HTML 的 Python 库...
  • IPython Notebook 和 Github 是怎样改变了我的 Python 教学方法
  • IPython Notebook 和 Github 是怎样改变了我的 Python 教学方法
  • github怎么导入中文版eclipse
  • GitHub 为什么没有中文版
  • 网站首页网页制作脚本下载服务器操作系统网站运营平面设计媒体动画电脑基础硬件教程网络安全vbsdos/bathtahtcpythonperl游戏相关vba远程脚本coldfusionruby专题autoitseraphzonepowershelllinux shellluagolangerlang其它首页pythondjango的分页器实例(paginator)pandas统计重复的列里面的值方法python编译成.so文件进行加密后调用的实现解析python 中/ 和 % 和 //(地板除)mysql适配器pymysql详解python转换摩斯密码示例python面向对象 反射原理解析python模仿网页版微信发送消息功能python标准库shutil模块使用方法解析python中的ftp通信模块ftplib的用法整理python入门教程 超详细1小时学会python 列表(list)操作方法详解python 元组(tuple)操作详解pycharm 2020最新永久激活码(附python 字典(dictionary)操作详解pycharm 使用心得(一)安装和首python strip()函数 介绍python 中文乱码问题深入分析python中使用xlrd、xlwt操作excepython科学计算环境推荐——anac详解duck typing鸭子类型程序设计与pythopython基于sftp及rsa密匙实现远程拷贝文件mac 上配置pycharm连接远程服务器并实现使python爬取盘搜的有效链接实现代码python时间的精准正则匹配方法分析python常用函数详解利用python如何生成随机密码对python中dataframe按照行遍历的方法python实现提取coco,voc数据集中特定的类python怎么删除缓存文件
    免责声明 - 关于我们 - 联系我们 - 广告联系 - 友情链接 - 帮助中心 - 频道导航
    Copyright © 2017 www.zgxue.com All Rights Reserved