对github的爬取,涉及请求的分析,登录爬取,request中session对象的使用

版权声明:本文为博主原创文章,未经博主允许可以转载。 https://blog.csdn.net/killeri/article/details/86093665

其实github的爬取相对来说是比较简单的,可以不用框架直接使用requests和BF就可以完成一个纵向的爬取。
代理工具:fiddler
首先说一下这次爬取的数据,是github上递归的爬取使用者主页的信息,包括博主和此博主主页上最受欢迎的六个项目(Popular Repositories)项目的名称,简介,星数和转载数。

在这里插入图片描述这是爬取的信息。

接下来我们来分析github的爬取,从登陆到递归爬取的整个过程。

第一步:我们登陆试试,用fiddler截取一下login页面的post请求,分析一下登陆需要传递给主机的data。
首先我们到login页面,输入密码账号然后发出post请求
在这里插入图片描述
通过fidddler的截取,我们获得了post请求。如图
在这里插入图片描述如图中,我们就有了post请求需要发送给主机的数据,他们是:
commit :Sign in
utf8 :✓
authenticity_token :36lBh69HcWi1QIS4DrgIwpXrT8KZ5QBuxZwrOP5upQPP+ARZFFQ8aljDFg4ZlOxoxPgbKmWHE7UV8tB7CUIxeg==
login :username
password :password

以上,我们知道除了用户名和密码,我们不知道的数据是“authenticity_token”,这个数据从哪里来呢?你可以考虑是js动态计算出来的,但是好像没有js文件。其实我们首先应该考虑从login页面中提取出来。那我们截取login页面,看一下从login响应体中是不是可以提取出想要的“authenticity_token”.
如图,我们截取了login页面,通过搜索,找到了参数。
在这里插入图片描述现在需要的只是把“authenticity_token”参数提取出来。

在贴出这一段代码之前,我们应该明白requests模块的session对象。session对象实例,是一个对话的实例,它可以跨请求保持cookie(在计算机网络相关知识中有队session的详细解释)。也就是通过cookie发送的所有请求都保持着登陆上去的cookies。接下来我们贴出这段的代码。

    def login(self, user_name, password):
        # 传进必要的参数,然后登陆
        post_data = {
            "commit":"Sign in",
            "utf8":"✓",
            "authenticity_token":self.parse_loginPage(),
            "login":user_name,
            "password":password
        }

        logined_html = self.session.post(url=self.post_url, data=post_data, headers=self.logined_headers, verify=False)
        if logined_html.status_code == 200:
            dashboardHtml = self.session.get(url=self.logined_url, headers=self.login_headers, verify=False)
            self.parse_loginedHtml(dashboardHtml)
            # 函数用于解析登陆后的主页,主页上有你关注人的最新动态,通过这个为入口,进行递归查询。

主页:
在这里插入图片描述
图示的方框中的动态版就是我们爬取的入口。
其url为:https://github.com/dashboard-feed
在这里插入图片描述在其中提取出人名就可,然后我们就可以构造其他人的主页链接,就可以进一步爬取了。
主页中我们爬取的内容用方框框起来了。
在这里插入图片描述这样,我们就完成的基本的爬取,至于**源码,在我的github上,**链接在此。
https://github.com/mikeyumingtao/PythonHouse/blob/master/githubSpider.py

猜你喜欢

转载自blog.csdn.net/killeri/article/details/86093665