目录
在爬虫逆向的过程中,Cookie 的加密处理是一个常见的难题。本文将根据视频内容,详细介绍 Cookie 的几种常见类型及处理方法,并结合代码进行讲解。
一、Cookie 加密的重要性
在编写爬虫时,我们可能会遇到这样的情况:昨天还能正常运行的爬虫,今天却突然运行失败了。这往往与 Cookie 有关。不同类型的网站可能会采用不同的 Cookie 处理方式,对爬虫进行反爬。因此,了解 Cookie 的加密方式对于成功编写爬虫至关重要。
二、常见的 Cookie 类型
(一)静态 Cookie
静态 Cookie 一般由静态页面构成。当我们请求网页的静态接口时,它会返回一段 JS 代码,并提示我们没有启动 JS 环境。这种 Cookie 比较好处理。
(二)时效性 Cookie(sit cookie)
- 特点:由二次加载构成,也被称为时效性 Cookie。例如同花顺问财神、雪球网、前程无忧、智联招聘、诸葛找房等网站都采用了这种 Cookie。
- 处理过程:
- 第一次请求页面地址时,会获得一段 JS 代码,并由服务器返回一个 cookie1 的值。同时,这段 JS 代码用于生成 cookie 的一个值。
- 第二次请求时,会携带第一次请求生成的 cookie 和服务器返回的 cookie,总共两个 cookie。
(三)加速乐类型(三次加载)
加速乐会做三次加载,与时效性 Cookie 有所区别。
(四)JS 赋值的 Cookie
以同花顺为例,它直接在 JS 代码当中生成一个 cookie,然后赋值给 document.cookie
。
三、以同花顺为例的 Cookie 处理方法
(一)定位 Cookie
- 打开同花顺问财神网站(以 EDGE 浏览器为例)。
- 右键点击检查,打开监听工具。
- 在监听工具中选择
xhr
(动态数据结构)。 - 点击搜索,下方会返回一个数据接口,其中包含所需数据。
- 观察 Cookie 中是否有特定的值,如 “V” 值。
(二)快速定位 Cookie 的方法
- 进入源代码页面。
- 在源代码页面的左边,选择 “片段”。
- 在下方进行进一步操作(视频中未详细说明具体操作方法)。
以下是一个简单的代码示例(仅为示意,实际情况可能需要更多的处理):
// 模拟第一次请求获取 JS 代码和 cookie1
function firstRequest() {
// 这里假设使用 fetch 进行请求
return fetch('https://example.com')
.then(response => {
const cookie1 = response.headers.get('Set-Cookie');
const jsCode = response.text();
return { cookie1, jsCode };
});
}
// 使用第一次请求获取的 JS 代码生成 cookie2
function generateCookie2(jsCode) {
// 这里需要根据具体的 JS 代码进行解析和处理
// 假设通过执行 JS 代码在全局环境中生成了 cookie2
eval(jsCode);
return document.cookie.split(';').find(cookie => cookie.startsWith('cookie2='))?.split('=')[1];
}
// 第二次请求携带两个 cookie
function secondRequest(cookie1, cookie2) {
return fetch('https://example.com/secondEndpoint', {
headers: {
Cookie: `${cookie1}; cookie2=${cookie2}`
}
});
}
firstRequest()
.then(({ cookie1, jsCode }) => generateCookie2(jsCode))
.then(cookie2 => secondRequest(cookie1, cookie2))
.then(response => console.log(response))
.catch(error => console.error(error));
请注意,以上代码仅为示例,实际应用中需要根据具体的网站情况进行调整和优化。在进行爬虫开发时,还需要遵守法律法规和网站的使用条款,避免非法爬取数据。
希望本文能帮助你更好地理解和处理 Cookie 加密问题,在爬虫逆向的道路上更加顺利。