python学习笔记之爬虫 -2-拉取github工程列表

需求

在命令行登录github,获取其账号下的仓库列表和相关信息

分析

就这个爬虫来看,其编码过程应该是这样的,第一步是分析网页,因为这里涉及到登录的问题,所以需要去登录页面查看其登录操作都发送了那些数据,使用什么来认证你的登录行为,然后利用代码模拟这种行为,就可以保持登录状态,然后在访问个人仓库的页面,分析其返回的网页内容,提取信息即可
观察github登录页面数据
github登录页面可以看到登录页面发送的数据除了用户名密码等还包含这样一个token,这个token显然不是自己有的,应该是github在其那面的操作中返回的,回退到login页面观察其response
response可以看到在你访问login页面的时候其返回的reponse中是包含了这个键值对的,因此我们可以先访问login页面,根据其返回的数据提取这个token,然后携带着这个token,以及上面的formdata,发送至session页面,保存期返回的cookies,每次访问时附加这个cookies,这样就能保持我们 的登录状态,即访问私人的页面不会受到登录的阻碍了。当然,最好是每一次访问的返回的cookies都更新到cookies中,再次发送时携带在发送中,模拟一个连续的网络行为

代码
import requests
from bs4 import BeautifulSoup
from bs4.element import Tag
#获取login页面的返回值,保存期cookies
log_in_ret = requests.get(url="https://github.com/login")
cookie1 = log_in_ret.cookies
#对象化其返回文本,分析得到token标签对象
login_code = BeautifulSoup(log_in_ret.text, features='html.parser')
token=login_code.find(name="input", attrs={'name' : "authenticity_token"})
print(token)
#post发送的字典
log_in_dict={
    'commit': 'Sign in',
    'utf8': '✓',
    'authenticity_token': token.get('value'),
    'login': 'xxxxx',
    'password': 'sssssss'
}
#想session页面发送登录数据,并将返回的cookies更新至最初的cookies
session = requests.post(url='https://github.com/session',data=log_in_dict,cookies=cookie1)
cookie1.update(session.cookies)
#获取个人仓库的页面,分析其返回值并打印
resps = requests.get(url='https://github.com/settings/repositories',cookies=cookie1)
soup = BeautifulSoup(resps.text, features='html.parser')
respList = soup.find(name='div', class_= 'listgroup js-collaborated-repos mb-4').children
for i in respList:
    if isinstance(i, Tag):
        a = i.find('a')
        print(a.text)

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值