- 什么是cookie?
- cookie的本质就是一组数据(键值对的形式存在)
- 是由服务器创建,返回给客户端,最终会保存在客户端浏览器中。
- 如果客户端保存了cookie,则下次再次访问该服务器,就会携带cookie进行网络访问
- 需求:爬取雪球网咨询数据
- 通过浏览器抓包工具分析,页面数据为动态加载;
- 直接对url发起请求:
- 结果报错了;
- 报错信息为:
- 分析:
- 使用浏览器的时候,并不需要登录操作;
- 只要爬虫拿不到你想要的数据,唯一的原因是爬虫程序模拟浏览器的力度不够!一般来讲,模拟的力度重点放置在请求头中!
- 此案例,只需要在请求头headers中添加cookie即可!
import requests
headers = {
'User-Agent':'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/99.0.4844.74 Safari/537.36'
}
url = 'https://xueqiu.com/statuses/hot/listV2.json'
param = {
"since_id" : "-1",
"max_id":"32650",
"size":"15"
}
response = requests.get(url = url,headers = headers,params = param)
page_text = response.text
print(page_text)
- 添加cookie的两种方式:
- 手动处理:将抓包中的cookie数据添加到headers中即可
- 缺点
- 编写麻烦
- cookie都具有时效性,一段时间后需要重新赋值
- 自动添加
- 基于session对象自动处理cookie
- 1.创建一个空白的session对象
- 2.使用session对象发起请求,目的是为了获取cookie
- 如果session对象在发请求的过程中,服务器端产生了cookie,则cookie会自动存储在session对象中
- 3.使用携带cookie的session对象发起请求
- 注意点:session对象至少需要发起两次请求
- 第一次请求的目的是为了捕获存储cookie到session对象
- 第二次的请求,就是携带cookie发起的请求了
import requests
#1.创建一个空白的session对象
session = requests.Session()
headers = {
'User-Agent':'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4758.80 Safari/537.36',
}
main_url = 'https://xueqiu.com/'
#2.使用session发起的请求,目的是为了捕获到cookie,且将其存储到session对象中
session.get(url=main_url,headers=headers)
url = 'https://xueqiu.com/statuses/hot/listV2.json'
param = {
"since_id": "-1",
"max_id": "311519",
"size": "15",
}
#3.就是使用携带了cookie的session对象发起的请求(就是携带者cookie发起的请求)
response = session.get(url=url,headers=headers,params=param)
data = response.json()
print(data)