提前声明:该专栏涉及的所有案例均为学习使用,如有侵权,请联系本人删帖!
我们使用Python的requests模块请求网站的一个接口时,通常需要携带headers模拟浏览器的正常请求。其中cookie是网站登录或者不登录下发的一个用户凭证。
但是对于一些网站,我们如果不登录,那么我们就无法请求进入网站内部的一些接口或页面,因此就需要登录,登录后下发的cookie就可以请求我们网站内部信息了。那么登录又分为两类情况:
在这里我们不进行模拟登陆,我们只简单使用一下cookie和session,先简单介绍一下cookie和session
1.cookie和session的区别
2.爬虫处理cookie和session
网站:https://codechina.csdn.net/explore/welcome
进入网址后登录
因此我们需要手动登录后,然后看到已经有了cookie
因此我们直接在请求的时候携带自己的cookie,如果我们登陆后,可以看到自己的用户名
那么看一下代码
# -*- coding: utf-8 -*-
import requests
url = 'https://codechina.csdn.net/explore/welcome'
headers = {
'Cookie': '...',
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.25 Safari/537.36'
}
# 请求,verify=False 跳过ssl验证
response = requests.get(url, headers=headers, verify=False)
response.encoding = 'utf-8'
if '不愿透露姓名の网友' in response.text:
print('cookie有效')
else:
print('cookie无效')
成功!
使用session的话,就是使用requests的session方式,他会记录请求携带的cookie状态
session = requests.Session()
url = 'https://codechina.csdn.net/explore/welcome'
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.25 Safari/537.36'
}
response = session.get(url, headers=headers, verify=False)
response.encoding = 'utf-8'
if '不愿透露姓名の网友' in response.text:
print('cookie有效')
else:
print('cookie无效')
然后我们塞入cookie,session中的cookie不能传入字符串,需要按键值对传入
session.cookie[key]=value
将字符串变成字段的方法
def cookie_to_dic(cookie_str):
"""将cookie字符串转为cookie字典"""
dic = {}
for i in cookie_str.split('; '):
dic[i.split('=')[0]] = i.split('=')[1]
return dic
放入一个登录的cookie
然后再使用该session访问其他的页面,可以直接访问成功
简单写下代码
# -*- coding: utf-8 -*-
import requests
def cookie_to_dic(cookie_str):
"""将cookie字符串转为cookie字典"""
dic = {}
for i in cookie_str.split('; '):
dic[i.split('=')[0]] = i.split('=')[1]
return dic
# 不放入cookie
session = requests.Session()
url = 'https://codechina.csdn.net/explore/welcome'
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.25 Safari/537.36'
}
response = session.get(url, headers=headers, verify=False)
response.encoding = 'utf-8'
if '不愿透露姓名の网友' in response.text:
print('cookie有效')
else:
print('cookie无效')
# 放入cookie
cookie_str = '...'
cookie_dict = cookie_to_dic(cookie_str)
for key, value in cookie_dict.items():
session.cookies[key] = value
response = session.get(url, headers=headers, verify=False)
response.encoding = 'utf-8'
if '不愿透露姓名の网友' in response.text:
print('cookie有效')
else:
print('cookie无效')
# 访问新页面
url_2 = 'https://codechina.csdn.net/courses'
response_2 = session.get(url)
response_2.encoding = 'utf-8'
if '不愿透露姓名の网友' in response_2.text:
print('cookie有效')
else:
print('cookie无效')