【2】简单防止爬虫ip被封

【2】简单防止爬虫ip被封

1. 伪装浏览器身份

防止爬虫ip被封,最简单的方案就是伪装身份,可以简单理解为请求的头信息就是HTTP请求者的身份证。要以浏览器的身份发起爬虫请求。就要伪造请求的头信息。

  • User-Agent :就是身份证的民族+地区,"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.88 Safari/537.36"表明HTTP请求者是Windows 64位系统下的谷歌浏览器。
  • Cookie 头信息则是表明已经登录,就好比已经得到当地的户口。那么购买学区房时,工作人员一看身份证是当地的,就有这个权限购买。网页识别请求者头信息携带Cookie,就允许请求者对需要登录权限的网页进行访问。我们在下一节讲解具体应用。
  • 其他头信息:设置头信息越多,伪装的身份可信度就越高。如果设置的头信息不够多,有的网页在返回响应数据时可能为空或者不予返回。不需要设置 Host 信息,有的网站比如当当网设置 Host 信息会导致访问失败。

同一网站的不同页面所需的头信息项数量存在差异,我们只要对关键的几项头信息设置就可以对多个页面进行访问了。

2. 获取伪装所需的头信息

通过查看Chrome浏览器,可以在 Network 中得到通过真正浏览器打开网页所携带的头信息,我们获取这些信息用于伪装身份。
【2】简单防止爬虫ip被封

  • 源代码
const axios = require('axios');
const iconv = require('iconv-lite');

// 要访问的目标网址
const targetUrl = "http://book.dangdang.com/";

let myHeaders = {
    "Accept":"text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9",
    "Accept-Encoding":"gzip, deflate",
    "Accept-Language":"zh-CN,zh;q=0.9",
    "Connection":"keep-alive",
    "Upgrade-Insecure-Requests":"1",
    "User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.88 Safari/537.36",
}

//不断读取流数据并放入数组中,直到全部读取完就将数组中的数据转换为utf8编码的字符串
axios.get(targetUrl, { headers: myHeaders,responseType: 'stream' })
    .then(function (response) {
        let chunks = [];
 
        //'data'当有数据可读时触发。
        response.data.on('data', function (chunk) {
            chunks.push(chunk);
        });
        //'end'没有更多的数据可读时触发
        response.data.on('end', function () {
            let buffer = Buffer.concat(chunks);
            //使用iconv将'gbk'编码的buffer解码转换为'utf8'的字符串
            let str = iconv.decode(buffer, 'gbk');
            console.log(str)
        })
    })
    .catch(function (error) {
        console.log(error);
    });
上一篇:php数组使用json_encode函数中文被编码成null的原因和解决办法


下一篇:iconv