python-爬虫之requests模块介绍(登录github)

介绍git

使用requests能够模拟浏览器的请求,比起以前用到的urllib,requests模块的api更加便捷(本质就是封装了urllib3)github

注意api

requests库发送请求将网页内容下载下来之后,并不会执行js代码,这须要咱们本身分析目标站点而后发起新的request请求浏览器

安装cookie

pip3 install requestssession

GET请求

requests.get(url="",
headers={'User-Agent':'',
      'Referer':'',},
Cookie={},        
)    #headers:请求头信息,User-Agent:浏览器标识,Referer:上次请求的url

POST请求

#GET请求
HTTP默认的请求方法就是GET
     * 没有请求体
     * 数据必须在1K以内!
     * GET请求数据会暴露在浏览器的地址栏中

GET请求经常使用的操做:
       1. 在浏览器的地址栏中直接给出URL,那么就必定是GET请求
       2. 点击页面上的超连接也必定是GET请求
       3. 提交表单时,表单默认使用GET请求,但能够设置为POST


#POST请求
(1). 数据不会出如今地址栏中
(2). 数据的大小没有上限
(3). 有请求体
(4). 请求体中若是存在中文,会使用URL编码!


#!!!requests.post()用法与requests.get()彻底一致,特殊的是requests.post()有一个data参数,用来存放请求体数据

发送post请求,模拟浏览器的登陆行为

'''
一 目标站点分析
    浏览器输入https://github.com/login
    而后输入错误的帐号密码,抓包
    发现登陆行为是post提交到:https://github.com/session
    并且请求头包含cookie
    并且请求体包含:
        commit:Sign in
        utf8:✓
        authenticity_token:lbI8IJCwGslZS8qJPnof5e7ZkCoSoMn6jmDTsL1r/m06NLyIbw7vCrpwrFAPzHMep3Tmf/TSJVoXWrvDZaVwxQ==
        login:egonlin
        password:123


二 流程分析
    先GET:https://github.com/login拿到初始cookie与authenticity_token
    返回POST:https://github.com/session, 带上初始cookie,带上请求体(authenticity_token,用户名,密码等)
    最后拿到登陆cookie

    ps:若是密码时密文形式,则能够先输错帐号,输对密码,而后到浏览器中拿到加密后的密码,github的密码是明文
'''

import requests
import re

#第一次请求
r1=requests.get('https://github.com/login')
r1_cookie=r1.cookies.get_dict() #拿到初始cookie(未被受权)
authenticity_token=re.findall(r'name="authenticity_token".*?value="(.*?)"',r1.text)[0] #从页面中拿到CSRF TOKEN

#第二次请求:带着初始cookie和TOKEN发送POST请求给登陆页面,带上帐号密码
data={
    'commit':'Sign in',
    'utf8':'',
    'authenticity_token':authenticity_token,
    'login':'xxxxxx',
    'password':'xxxxx'
}
r2=requests.post('https://github.com/session',
             data=data,
             cookies=r1_cookie
             )


login_cookie=r2.cookies.get_dict()


#第三次请求:之后的登陆,拿着login_cookie就能够,好比访问一些我的配置
r3=requests.get('https://github.com/settings/emails',
                cookies=login_cookie)

print('xxxx' in r3.text) #True

自动登录github(本身处理cookie)
相关文章
相关标签/搜索