python爬虫入门教程之六——cookies及requests session的使用(直接带cookies登录)

爬虫 kingmo888 702℃ 0评论

1、基础cookies信息

先上一段对比代码,分别访问了博客主页和百度首页

可以看到,我的博客主页并没有cookies信息,而百度首页已然带上了一些cookies信息了。对这种包含一些 cookie的,像字典一样使用命令res.cookies.keys()查看他的键值,像字典dict一样获取键值,比如

2、从浏览器获取cookies

在无痕模式(假装第一次访问)下访问我的博客主页,会发现requests并没有cookies,如下图:

因为博客主页前台登录后会由登录变成登出,所以可以通过判断是否存在该字符串来检测是否登录成功。

def getcookies():
    with open('cookies.txt', 'r') as f:
        cookies_str = f.readlines()[0]
    cookies = {}
    for x in cookies_str.split(';'):
        x = x.strip()
        sep = x.index('=')
        name = x[:sep]
        content = x[sep+1:]

        cookies[name] = content
    return cookies
url = 'http://www.lizenghai.com'
cookies = getcookies()
res = requests.get(url, cookies=cookies)
html = res.content.decode()
print('登出' in html)

它将会打印True

Cookie 的返回对象为 RequestsCookieJar,它的行为和字典类似,但接口更为完整,适合跨域名跨路径使用。你还可以把 Cookie Jar 传到 Requests 中:

>>> jar = requests.cookies.RequestsCookieJar()
>>> jar.set(‘tasty_cookie’, ‘yum’, domain=‘httpbin.org’, path=‘/cookies’)
>>> jar.set(‘gross_cookie’, ‘blech’, domain=‘httpbin.org’, path=‘/elsewhere’)
>>> url = http://httpbin.org/cookies
>>> r = requests.get(url, cookies=jar)
>>> r.text
‘{“cookies”: {“tasty_cookie”: “yum”}}’

3、从浏览器获取cookies供给webchrome使用

此处我们放在后面webchrome讲解。

4、保持cookies会话——session

request.get的话每次都要传递cookies进去才行。这样太麻烦了。

要知道,在浏览器中登录了某个网站之后,基本只要浏览器不关闭(看cookies超时时间),浏览该网站下的其他页面也是处于登录状态,这就叫做会话对象的保持(保持cookies)。

会话对象让你能够跨请求保持某些参数。它也会在同一个 Session 实例发出的所有请求之间保持 cookie, 期间使用 urllib3 connection pooling 功能。所以如果你向同一主机发送多个请求,底层的 TCP 连接将会被重用,从而带来显著的性能提升。

这一次例子中,为了便于大家测试(毕竟只有我有本博客的后台账号了)我们以豆瓣为例,在chrome浏览器下首先登录豆瓣,复制豆瓣首页中的cookies信息(前文中有说明)到cookies.txt,执行以下代码:

url = 'http://www.douban.com'
cookies = getcookies()
session = requests.session()
requests.utils.add_dict_to_cookiejar(session.cookies, cookies)
res = session.get(url)
html = res.content.decode()

可以看到html中已经有账号管理等登录后才能看到的信息。

我们使用这个提前配置了cookiessession来访问豆瓣账号管理页面,如果未登录成功,将会跳转回登录页面。

https://accounts.douban.com/passport/setting

# 在访问一下账号管理。

# 在访问一下账号管理。
url = 'https://accounts.douban.com/passport/setting'
res = session.get(url)
html = res.content.decode()

很明显,html信息中是ok的。

转载请注明:Python量化投资 » python爬虫入门教程之六——cookies及requests session的使用(直接带cookies登录)

喜欢 (0)or分享 (0)
发表我的评论
取消评论
表情

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址
(1)个小伙伴在吐槽
  1. :mrgreen: ,没事儿干,自己占个沙发吧。
    kingmo8882019-04-17 15:30 回复