请求头(HTTP Header)是 HTTP 协议中用于在客户端和服务器之间传递信息的一部分。它包含了请求的来源、用户代理、内容类型等关键信息。许多网站通过检查请求头中的特定字段来判断请求是否来自合法的浏览器,从而防止爬虫的非法访问。
“某查”平台也不例外。它通过多种方式检测请求头,以识别并阻止非正常的爬虫访问。这些检测方式包括但不限于:
User-Agent
字段,判断请求是否来自常见的浏览器。“某查”平台的请求头反爬技术主要体现在以下几个方面:
User-Agent
字段不符合合法浏览器的特征,平台可能会直接拒绝访问。Referer
字段,确保请求是从合法的页面发起的。如果 Referer
字段为空或不符合预期,请求可能会被拦截。为了应对“某查”平台的请求头反爬机制,开发者可以采取以下策略:
import axios from 'axios';
const headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36',
'Referer': 'https://www.moucha.com/',
'Cookie': 'session_id=1234567890abcdef; user_token=abcde12345',
'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8',
'Accept-Language': 'zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3',
'Accept-Encoding': 'gzip, deflate, br'
};
axios.get('https://www.moucha.com/data', { headers })
.then(response => {
console.log('请求成功:', response.data);
})
.catch(error => {
console.error('请求失败:', error);
});
在上述代码中,我们通过 axios
库发送请求,并设置了多个关键的请求头字段,以模拟合法浏览器的行为。
User-Agent
字段,或者根据平台的规则生成自定义字段。TypeScript复制function getRandomUserAgent() {
const userAgents = [
'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36',
'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.103 Safari/537.36',
'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:89.0) Gecko/20100101 Firefox/89.0'
];
return userAgents[Math.floor(Math.random() * userAgents.length)];
}
const headers = {
'User-Agent': getRandomUserAgent(),
'Referer': 'https://www.moucha.com/',
'Cookie': 'session_id=1234567890abcdef; user_token=abcde12345',
'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8',
'Accept-Language': 'zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3',
'Accept-Encoding': 'gzip, deflate, br'
};
axios.get('https://www.moucha.com/data', { headers })
.then(response => {
console.log('请求成功:', response.data);
})
.catch(error => {
console.error('请求失败:', error);
});
在上述代码中,我们通过 getRandomUserAgent
函数随机选择一个 User-Agent
字段,以应对平台的动态检测。
import axios from 'axios';
// 随机生成 User-Agent 的函数
function getRandomUserAgent() {
const userAgents = [
'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36',
'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.103 Safari/537.36',
'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:89.0) Gecko/20100101 Firefox/89.0'
];
return userAgents[Math.floor(Math.random() * userAgents.length)];
}
// 设置代理信息
const proxy = {
host: 'www.16yun.cn', // 代理服务器地址
port: 5445, // 代理服务器端口
auth: {
username: '16QMSOML', // 代理用户名
password: '280651' // 代理密码
}
};
// 设置请求头
const headers = {
'User-Agent': getRandomUserAgent(),
'Referer': 'https://www.moucha.com/',
'Cookie': 'session_id=1234567890abcdef; user_token=abcde12345',
'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8',
'Accept-Language': 'zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3',
'Accept-Encoding': 'gzip, deflate, br'
};
// 发起请求
axios.get('https://www.moucha.com/data', { headers, proxy })
.then(response => {
console.log('请求成功:', response.data);
})
.catch(error => {
console.error('请求失败:', error);
});
在上述代码中,我们通过 axios
的 proxy
配置项设置了代理服务器,以隐藏真实的 IP 地址。
import axios from 'axios';
import { sleep } from 'some-utils';
async function fetchData() {
const headers = {
'User-Agent': getRandomUserAgent(),
'Referer': 'https://www.moucha.com/',
'Cookie': 'session_id=1234567890abcdef; user_token=abcde12345',
'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8',
'Accept-Language': 'zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3',
'Accept-Encoding': 'gzip, deflate, br'
};
for (let i = 0; i < 10; i++) {
try {
const response = await axios.get('https://www.moucha.com/data', { headers });
console.log('请求成功:', response.data);
} catch (error) {
console.error('请求失败:', error);
}
await sleep(1000); // 每次请求间隔 1 秒
}
}
fetchData();
在上述代码中,我们通过 sleep
函数控制了每次请求的间隔时间,避免了过高的请求频率。
“某查”平台的请求头反爬技术虽然复杂,但通过合理的技术手段,开发者仍然可以应对。本文介绍了“某查”平台请求头反爬的主要技术手段,并提供了多种应对策略,包括模拟合法请求头、动态生成字段、使用代理和合理控制请求频率等。开发者可以根据实际情况选择合适的方法,以实现高效、稳定的数据爬取。