【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 中得到通过真正浏览器打开网页所携带的头信息,我们获取这些信息用于伪装身份。
在这里插入图片描述

  • 源代码
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);
    });
### 如何防止爬虫被网站IP的最佳实践和解决方案 为了有效防止爬虫被网站IP地址,可以采取多种措施来规避检测并保持良好的抓取行为。以下是几种推荐的做法: #### 使用代理池 通过构建或利用现成的代理池服务,可以在每次请求时更换不同的IP地址,从而减少单个IP访问频率过高而触发锁的风险[^1]。 #### 控制请求速率 合理设置延时间隔,在两次连续HTTP请求之间加入随机等待时间,模拟人类用户的浏览习惯,降低因频繁请求造成的服务器压力及被识别为自动化程序的可能性[^2]。 #### 更改User-Agent头信息 修改HTTP头部中的`User-Agent`字段,使其看起来像是来自各种主流浏览器而非默认的Python库配置,这样有助于绕过某些基于客户端特征判断的简单防护机制[^3]。 #### 实施重试逻辑与异常处理 当遇到临时性的连接问题(如超时)或其他形式的服务端拒绝响应时,应具备完善的错误恢复流程,比如自动切换到备用代理节点继续尝试直至成功完成任务;同时做好详细的日志记录以便后续分析排查潜在隐患。 ```python import requests from fake_useragent import UserAgent import time import random def fetch_page(url, proxy_pool): ua = UserAgent() headers = {'User-Agent': ua.random} while True: try: response = requests.get( url, proxies={'http': 'http://' + random.choice(proxy_pool)}, headers=headers, timeout=5 ) if response.status_code == 200: return response.text except Exception as e: print(f"Error occurred: {e}") wait_time = round(random.uniform(1, 3), 2) time.sleep(wait_time) proxy_ips = ['ip1', 'ip2'] # Replace with actual IP addresses or use a service. html_content = fetch_page('https://example.com/', proxy_ips) print(html_content[:100]) # Print first 100 characters of the fetched page content. ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值