之前的文章中讲到,有很多网站为了防止爬虫程序爬网站造成网站瘫痪,所以我们的程序在模拟浏览器访问这些网站时,需要携带一些headers头部信息才能访问,最常见的有User-Agent、referer、cookie参数。那么针对cookie参数的处理 ,有以下两种方式。
直接携带cookie请求url地址
- cookie放在headers中。这种方式与headers中携带User-Agent一样,只需要将cookie字符串放在headers字典中即可。
headers = {'User-Agent': '......',
'Cookie':'cookie字符串'}
requests.post(url, date, headers=headers)
- cookie字典传给cookies参数。这种方式需要新增一个cookie的字典,再将该参数传给cookies参数。写一个简单的例子:Cookie:OUTFOX_SEARCH_USER_ID=-1514949692@10.169.0.83; JSESSIONID=aaasMk1xexHQo77h5hWSw; OUTFOX_SEARCH_USER_ID_NCOO=253932778.30526197; ___rl__test__cookies=1559880583877,“=”左边为参数,“=”右边为值。
Cookie_dirt = { 'OUTFOX_SEARCH_USER_ID'= '-1514949692@10.169.0.83',
'JSESSIONID'='aaasMk1xexHQo77h5hWSw',
'OUTFOX_SEARCH_USER_ID_NCOO'='253932778.30526197',
'___rl__test__cookies'='1559880583877'
}
requests.post(url, date, headers=headers, Cookie=Cookie_dirt)
使用session
假如我们现在要登陆一个网站,需要输入用户名(username)和密码(password),那么我们可以先发送一次post请求,获取到cookie,然后再携带cookie请求登陆之后的页面。使用这种方法,我们需要用的session。使用session发送一次请求,那么服务器设置在本地的Cookie,则会直接保存在session中,此时我们再用session.get直接请求登陆后的界面。写一个简单的例子如下:
import requests
#实例化session
s = requests.session()
post_url = '登录界面的url'
headers = {}
post_data = {'username': '',
'password': ''}
s.post(post_url, headers=headers, post_data=post_data)
#再使用session请求登陆后的页面
url = '登陆后的页面url'
response = s.get(url, headers=headers)