python 二 :request进阶

一、cookies

cookies和User-Agent都属于header的内容,是爬虫必须要设置的选项。

我们先来看一个获取cookies的示例:

import requests
r = requests.get('https://www.baidu.com/')
print(r.cookies)
for key,value in r.cookies.items():
    print(key+'='+value)

运行结果:

<RequestsCookieJar[<Cookie BDORZ=27315 for .baidu.com/>]>
BDORZ=27315

cookies的目的就是维持登录,下面我们来看一下用cookies维持登录的例子。

如果不设置cookies,访问知乎:

import requests
headers={
    'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3578.98 Safari/537.36'
}
r = requests.get('https://www.zhihu.com/',headers=headers)
print(r.text)

上篇已经介绍过,这里需要设置一下User-Agent,不然支付会决绝访问。运行查看结果,此为未登录时的数据。

设置cookies后比较一下,首先登录知乎:

获取到cookies,然后设置到headers中,示例代码如下:

import requests
headers={
    'cookie':'q_c1=69766cd339a54727a43c932f88e5219a|1543560937000|1543560937000; d_c0="AIAhXV3tmA6PTh9iKZY7G4EkH8rNoCz8ogU=|1543560939"; _xsrf=yjs42x6pTqP026X8louFX2xQ2oWuDNzC; _zap=2afe039d-3dfa-4e88-ac5b-18a448d02159; tst=r; capsion_ticket="2|1:0|10:1545379051|14:capsion_ticket|44:MDI2ZmM5NjI3ZDNmNGZlYWE2NDM4NGM2MWY5ZTQyNzU=|f6ec55ce01a506e07f52944a7eb4303f4541e1ff7c37b3297ff6bac784c22614"; z_c0="2|1:0|10:1545379059|4:z_c0|92:Mi4xZmJuVEF3QUFBQUFBZ0NGZFhlMllEaVlBQUFCZ0FsVk44LW9KWFFBaTc2bERIZ1F5X2tQM0o3bDA1eWFWU1VMQ2hn|0895c1025a0b494a14cf85e0d6b901828850dd6e5590b75cd4d30dc16d90ca98"; __utma=51854390.970233862.1543560939.1543563512.1545379076.3; __utmz=51854390.1545379076.3.3.utmcsr=zhihu.com|utmccn=(referral)|utmcmd=referral|utmcct=/; __utmv=51854390.100--|2=registration_date=20161218=1^3=entry_date=20161218=1; tgw_l7_route=b3dca7eade474617fe4df56e6c4934a3',
    'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3578.98 Safari/537.36',
}
r = requests.get('https://www.zhihu.com/',headers=headers)
print(r.text)

此时运行后发现,获取的是正常登录知乎后的数据。

二、会话维持 session

上面的例子,我们只用来一次get方法,在实际中,我们可能会用多次get,每一次的get可能会依赖于上次的get。

按照上面的例子,我们每次get或post都相当于打开了一个新的浏览器,要想实现本次的get依赖于上次的get,每次get都需要设置cookie,这样比较麻烦,session就是为解决此问题而诞生的。

我们先来看一个例子:

import requests
requests.get('http://httpbin.org/cookies/set/number/123456789')
r = requests.get('http://httpbin.org/cookies')
print(r.text)

我们先设置一个cookie,然后再用一个get方法获取cookie,运行结果如下:

{
  "cookies": {}
}

获取的cookie为空,是因为第二次get实际上新打开一个浏览器。如果用seesion之后呢?示例如下:

import requests
s = requests.Session()
s.get('http://httpbin.org/cookies/set/number/123456789')
r = s.get('http://httpbin.org/cookies')
print(r.text)

运行结果如下:

{
  "cookies": {
    "number": "123456789"
  }
}

这就是session的作用,可以模拟一个浏览器打开一个站点的不同网页。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值