一、IP 封锁
网站可以检测请求的IP地址,并封锁那些频繁请求的IP,使其无法访问网站。这是一种常见的反爬虫策略,用于防止单个IP地址对服务器造成过大的负载。
- 解决办法 : 使用代理IP池以避免IP封锁
// 待补充
二、请求头检测(User-Agent检测)
通过检查请求头中的User-Agent
字段,网站可以识别出请求是否来自常见的浏览器或是一个自动化脚本。如果User-Agent
表明请求来自一个爬虫程序,网站可能会拒绝该请求。
当然可以,以下是对这些常见请求头参数及其常见值的注释说明:
-
Accept: 指定客户端能够处理和希望接收的MIME类型。
text/html
: 表示客户端可以处理和显示HTML文档。application/json
: 表示客户端期望接收JSON格式的数据。application/xml
: 表示客户端可以处理XML格式的数据。*/*
: 表示客户端可以接受任何类型的数据。
但是在大多数情况下,网站是起到浏览作用的,所以会直接返回到他的源码。
-
Accept-Encoding: 客户端支持的内容编码方式。
gzip
: 客户端支持gzip压缩算法。deflate
: 客户端支持deflate压缩算法。br
: 客户端支持Brotli压缩算法。
useless
-
Accept-Language: 客户端希望接收的语言版本。
en-US
: 客户端希望接收美式英语的内容。zh-CN
: 客户端希望接收简体中文的内容。fr
: 客户端希望接收法语的内容。
useless
-
Cache-Control: 用于指示缓存行为。
no-cache
: 不使用本地缓存,需要从服务器重新获取数据。max-age=0
: 缓存的内容立即过期,需要重新验证。no-store
: 不存储任何关于客户端请求或服务器响应的缓存信息。
useless
-
Connection: 控制网络连接的行为。
keep-alive
: 保持连接,以便复用TCP连接发送和接收多个HTTP请求和响应。close
: 请求完成后关闭连接。
useless
-
Content-Type: 请求体的媒体类型(对于POST, PUT等带有请求体的请求)。
application/x-www-form-urlencoded
: 发送键值对数据,通常用于HTML表单。multipart/form-data
: 发送复杂的表单数据,如文件上传。application/json
: 发送JSON格式的数据。
useless
-
Cookie: 客户端存储的Cookie信息,用于服务器识别用户。
session_id=12345; user_id=abc
: 示例Cookie值,包含会话ID和用户ID。
-
Host: 请求的目标主机名或IP地址。
www.example.com
: 目标服务器的域名。
-
Referer: 表示当前请求是从哪个页面发起的。
http://www.referrer.com/page
: 发起请求的源页面URL。
-
User-Agent: 标识发送请求的客户端信息,如浏览器版本和操作系统。
- 浏览器标识字符串: 示例为Chrome浏览器的User-Agent字符串,包含浏览器名称、版本和操作系统信息。
在整个访问头中最重要的内容,在某些反爬网站会使用这一点来判断你是不是使用了爬虫程序进行爬取。
如何获取本地的User_Agent
当然即使不使用本地 User_Agent 也是可以的,下面给出两个参考例子
shell
Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:129.0) Gecko/20100101 Firefox/129.0
Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/127.0.0.0 Safari/537.36 Edg/127.0.0.0
- Authorization : 用于API访问或其他需要身份验证的请求的认证信息。
Bearer TOKEN
: 使用Bearer令牌进行身份验证,TOKEN是服务器颁发的认证令牌。
解决方式 : 在每次询问的请求头中更新 User_Agent
验证码与人机验证
当网站检测到异常请求模式时,如频繁的访问或来自同一IP的大量请求,它可能会要求用户输入验证码或通过其他形式的人机验证来确认请求者的身份。这可以有效阻止自动化爬虫,因为它们通常无法处理这种验证过程。
其他
- 频率限制 :
- 网站可以设置请求频率的限制,以防止爬虫程序对网站进行过度的访问。如果来自同一IP地址或用户的请求超过了设定的阈值,网站可能会暂时或永久地禁止该IP或用户的访问。
- 动态页面加载 :
- 一些网站使用JavaScript等技术动态加载内容。这种技术对于仅支持静态页面抓取的爬虫程序来说是一个挑战,因为它们无法直接获取到动态加载的内容。
- 使用robots.txt :
- 虽然
robots.txt
文件主要用于指导搜索引擎爬虫的行为,但它也可以作为一种简单的反爬虫机制。通过在该文件中指定不允许爬取的URL或路径,网站可以告知遵守该协议的爬虫程序不要访问这些区域。然而,需要注意的是,并非所有爬虫都会遵守robots.txt
的规定。
- 虽然
- 隐藏链接和元素 :
- 有些网站会使用CSS或JavaScript来隐藏某些链接或页面元素,以防止爬虫程序轻易地获取到这些信息。这种方法可以增加爬虫程序的解析难度。
- 分布式拒绝服务(DDoS)防御机制 :
- 虽然这不是专门针对爬虫的程序,但一些高级的DDoS防御系统可以识别并阻挡异常流量模式,包括来自爬虫程序的流量。