1、说明
搜狗微信爬虫逻辑如下图(采用selenium模拟浏览器行为)。微信公众平台爬虫逻辑为输入cookie、fakeid、query后爬取。
搜狗微信和微信公众平台具体代码放在最后(需要根据你的实际情况更改的已标注),2024年12月10日测试没问题。仅供个人学习使用。如有疑问,请留言评论。
2、基础知识
-
新版本的微信客户端已经无法抓取历史消息页的包了,无论是直接抓包还是通过Proxifier或其他中间人代理的方式都只能抓到封面图片,没有页面文章数据。
-
Proxifier:Proxifier 是一款代理软件,它可以让应用程序通过指定的代理服务器进行网络连接。简单来说,它是一个中间人,负责将应用程序(如微信客户端)的网络请求转发到代理服务器,然后再将代理服务器返回的响应转发回应用程序。在某些情况下,直接在本地网络接口抓包可能会受到限制,或者无法获取完整的信息。这时,使用 Proxifier 将微信客户端的网络连接通过一个代理服务器进行转发,可以改变网络流量的路径,使得抓包工具能够在代理服务器一侧更容易地捕获到完整的微信客户端与服务器之间的通信数据。例如,当微信客户端的网络请求经过 Proxifier 配置的代理服务器时,抓包工具在代理服务器端进行抓包,就有可能绕过微信客户端本身的一些安全限制或者数据加密措施,从而获取到更全面的信息,如历史消息页的文章数据。不过,随着微信客户端安全机制的加强,这种方式也可能会受到限制,就像文中提到的新版本微信客户端无法通过这种方式抓取历史消息页的完整数据,只能获取封面图片。
-
抓包:抓包(Packet Capture)是一种网络技术,用于捕获在网络中传输的数据分组。在计算机网络通信中,数据是以数据包(Packet)的形式在不同设备(如客户端和服务器)之间传输的。抓包工具就像一个网络数据的 “捕手”,可以截获这些数据包,并显示其中的内容。通过抓包,可以查看网络通信的详细信息。在微信客户端的例子中,抓包的目的可能是为了获取微信历史消息页的内容相关数据,包括文章的标题、作者、内容、发布时间等。这对于开发者分析微信的通信协议、数据格式,或者进行数据采集(如爬虫开发者想要获取微信公众号文章的数据)等活动非常有用。抓包工具通常会在网络接口(如网卡)处监听经过的数据包。当微信客户端发送请求获取历史消息页的数据时,这些请求数据包以及服务器返回的响应数据包都会被抓包工具捕获。然后,可以通过分析这些数据包的内容来获取所需的信息。例如,HTTP 抓包工具可以显示请求的 URL(包含获取文章的具体路径)、请求头(包含用户代理、Cookie 等信息)、请求体(如果有),以及服务器返回的响应状态码、响应头和响应体(包含文章的实际内容)。
-
通信协议:通信协议是计算机网络中为实现数据通信而建立的规则、标准或约定。它规定了数据的格式、传输方式、传输顺序、差错控制等诸多方面的内容。在网络通信中,不同的应用场景和功能通常会使用不同的通信协议。微信客户端和服务器之间进行数据交互时,会遵循特定的通信协议,如 HTTP(超文本传输协议)或 HTTPS(超文本传输安全协议)。以 HTTP 为例,它规定了客户端如何向服务器发送请求(包括请求方法,如 GET、POST 等),以及服务器如何返回响应。例如,当微信客户端想要获取历史消息页的文章时,会使用 HTTP 协议向服务器发送一个 GET 请求,这个请求的格式和内容(如请求头、请求体等)以及服务器返回的响应格式都由 HTTP 协议来规范。通过分析这些遵循协议的通信内容,开发者可以了解微信客户端与服务器之间的数据交互细节。
-
用户代理(User - Agent):用户代理是包含在 HTTP 请求头中的一个字段,用于标识发送请求的客户端软件(如浏览器、移动应用等)的相关信息。它可以包含软件名称、版本号、操作系统等内容。微信客户端在向服务器发送请求时,其请求头中的用户代理字段会表明这是微信客户端发出的请求,并且可能包含微信客户端的版本信息和运行的操作系统信息。例如,服务器可以根据用户代理信息来判断请求来自微信客户端而不是其他浏览器,并且可以根据版本信息来提供适当的内容或功能。对于开发者来说,查看用户代理信息有助于了解微信客户端在网络通信中的身份标识方式,也有助于在进行数据采集或开发与微信兼容的工具时,模拟真实的微信客户端请求。
-
字段:在计算机科学和网络通信中,“字段”(Field)是一个数据结构中的组成部分,用于存储特定类型的信息。就像在表格中,每一列都代表一个特定的类别(如姓名、年龄、性别等),这些类别对应的单元格存储相应的数据,在数据结构中,字段就类似于表格中的列,是具有明确含义和用途的数据存储单元。HTTP 请求头是 HTTP 请求的一部分,它包含了许多不同的行,每行都由一个字段名和一个对应的值组成,中间用冒号分隔。例如:User - Agent: WeChat/7.0.18 (iOS 14.4),这里User - Agent是字段名,WeChat/7.0.18 (iOS 14.4)是这个字段的值。
用户代理字段的具体含义:在用户代理这个字段中,存储的是关于发送请求的客户端软件的标识信息。这些信息以一种特定的格式排列,包括软件名称(如 WeChat 表示微信)、版本号(如 7.0.18)和操作系统信息(如 iOS 14.4)等。通过这种方式,服务器可以读取请求头中的用户代理字段,快速了解请求来自何种客户端软件、其版本情况以及运行的操作系统环境等信息,从而做出相应的处理,比如为不同版本的微信客户端提供适合其功能支持的内容,或者针对不同操作系统进行适配等。 -
请求体:请求体是 HTTP 请求的一部分,它包含了客户端发送给服务器的数据内容。在一些请求方法(如 POST)中,请求体通常用于传递用户输入的数据、文件上传的数据或者其他需要发送给服务器的信息。如果微信客户端需要向服务器发送一些特殊的数据来获取历史消息页,比如用户的登录凭证、特定的筛选条件(如按照日期范围或公众号类别筛选历史消息)等,这些数据可能会放在请求体中。不过,在一些简单的获取信息的请求(如使用 GET 方法)中,可能没有请求体或者请求体为空。分析请求体可以帮助开发者了解客户端向服务器发送了哪些具体的数据,这些数据对于获取目标信息(如历史消息页文章)起到了什么作用。
-
响应头:响应头是服务器返回的 HTTP 响应的一部分,它包含了关于响应的各种元数据信息。这些信息可以包括响应的状态码(如 200 表示成功,404 表示未找到等)、内容类型(如 text/html 表示 HTML 文档,application/json 表示 JSON 数据等)、缓存控制信息、服务器信息等。当微信客户端请求历史消息页的文章后,服务器返回的响应头会包含关于文章数据的一些基本信息。例如,响应头中的内容类型字段可能会显示文章内容是 HTML 格式还是其他格式,缓存控制信息可以告诉客户端是否可以缓存文章内容以及缓存的时长等。通过分析响应头,开发者可以快速了解服务器返回的数据的基本属性和要求,以及如何正确地处理这些数据。
-
响应体:响应体是服务器返回的 HTTP 响应的主要部分,它包含了客户端请求的实际数据内容。在微信客户端获取历史消息页文章的例子中,文章的标题、作者、内容、发布时间等信息通常都包含在响应体中。如果响应体是 HTML 格式,那么其中会包含用于构建历史消息页文章显示的 HTML 标签和文本内容;如果是 JSON 格式,可能会以键值对的形式包含文章的各种属性信息。开发者主要通过解析响应体来获取他们想要的具体数据,如文章内容用于显示或进一步的数据采集和分析。
-
抓包分析:
-
历史消息页API接口:API 是 Application Programming Interface 的缩写,即应用程序编程接口,它是一组定义好的方法、协议和工具,使得不同的应用程序或软件组件之间能够相互通信、共享数据和调用功能 。而历史消息页 API 接口,是微信公众平台提供的一种特殊的 API 接口,用于获取微信公众号历史消息页的相关数据
-
通过翻页参数就可以持续获取历史数据了
-
参数
说明
biz
公号id
offset
翻页参数
uin
微信号id
key
采集关键参数
-
因为每个公号点击产生的key是不通用的
-
“万能 key” 是一种用于访问微信公众号历史消息页数据接口的特殊标识符。它类似于一把 “通用钥匙”,可以打开不同微信公众号数据接口的 “大门”,实现跨公众号的数据采集。
-
新版微信采用的是自己的协议进行数据传输,所以通过常规的抓包方式无法抓到包。解决方法需要逆向微信客户端,通过RPC的方式调用新版的微信协议。通过这个方式采集到的数据就和新版微信页面看到的数据一致了,除了文章列表外也有公号的基本信息。此方案的稳定性最好,而且新版本的接口数据获取更加全面反扒也不严重,唯一的缺陷就是和新版公号页面规则一样,不关注公号的情况下只能看首页内容,关注后才可以进行翻页获取。另外微信采集还涉及到大量的账号维护成本、注册,养号以及采集过程中的资源调度,频繁采集或养号不当都会造成账号封禁
-
逆向微信客户端:
定义:逆向工程(Reverse Engineering)是一种技术手段,用于分析产品(如软件、硬件等)的设计和实现细节。逆向微信客户端就是通过对微信客户端软件进行反编译、调试等操作,来理解其内部的工作原理、数据存储方式和通信机制。
正常情况下,软件是从源代码编译成机器可执行的二进制文件进行发布的。逆向工程试图从二进制文件反向推导出软件的源代码逻辑,或者至少是理解其关键的功能实现部分。
目的和过程
目的:在这个情境下,逆向微信客户端是为了弄清楚新版微信采用的自己的协议是如何工作的。因为常规抓包方式失效,通过逆向可以找到微信内部的数据传输路径、加密方式、协议格式等关键信息。
过程:这通常涉及使用专业的逆向工具,如 IDA Pro、Ghidra 等。这些工具可以帮助分析微信客户端的二进制文件。例如,反编译可以将二进制代码转换为近似的汇编语言或更高级的编程语言表示,分析人员可以从中寻找与数据传输相关的函数调用、网络连接初始化等关键代码片段。通过对这些代码的分析,尝试理解微信如何打包数据、加密数据以及如何与服务器进行通信,从而找到可以获取数据的方法。
风险和合法性问题
逆向微信客户端可能涉及侵犯知识产权等法律问题。微信客户端的代码受版权保护,未经授权的逆向可能违反软件使用许可协议。而且,如果逆向过程中发现并利用了微信的安全漏洞进行非授权的数据获取,还可能涉及到安全和法律风险。 -
RPC:定义
RPC 是 Remote Procedure Call 的缩写,它是一种计算机通信协议,允许一个程序(通常是客户端)调用另一个位于不同地址空间(通常是服务器端)的程序中的过程或函数,就好像这个过程是在本地调用一样。
简单来说,它提供了一种机制,让不同的软件组件(可以在不同的计算机或者同一计算机的不同进程中)能够相互通信并共享功能。
在微信数据采集中的应用
调用微信协议:在逆向微信客户端理解其协议后,通过 RPC 的方式可以在外部程序中按照微信的协议规范向微信服务器发送请求并获取数据。例如,外部的数据采集程序可以像微信客户端内部一样调用获取公众号信息、文章列表等功能的 “过程”(实际上是遵循微信协议的请求操作),使得采集到的数据和新版微信页面看到的数据一致。
跨进程 / 跨系统通信优势:RPC 隐藏了网络通信的复杂性,让开发者可以专注于功能调用。对于微信数据采集来说,不用关心底层的网络细节,如 TCP/IP 连接的建立、数据的序列化和反序列化等,只需要按照定义好的 RPC 接口(类似于本地函数调用)就可以获取微信的数据,提高了开发效率并且使得数据采集程序的结构更加清晰。 -
Chrome浏览器
-
API
-
打开Chrome的开发者工具,选择Network
-
以"appmsg"开头的便是我们需要分析的内
-
https://mp.weixin.qq.com/cgi-bin/appmsg: 请求的基础部分
?action=list_ex: 常用于动态网站,实现不同的参数值而生成不同的页面或者返回不同的结果
&begin=0&count=5&fakeid: 用于设置?里的参数,即begin=0, count=5 -
我们之所以能在浏览器上获取资源,是因为我们登录了微信公众号后端。而Python并没有我们的登录信息,所以请求是无效的。我们需要在requests中设置headers参数,在其中传入Cookie和User-Agent,来模拟登陆
-
requests:是 Python 用于发送 HTTP 请求的库,能方便地获取网页内容、与网络资源交互。比如请求网页内容
-
headers 参数:是 requests 库中请求方法的可选参数,用于设置请求头信息来模拟客户端行为或提供认证信息。
-
Cookie:是服务器发送给浏览器用于记录用户会话状态等信息的文本,浏览器会在同域名后续请求中将其发回服务器。比如登录信息
-
User - Agent:是 HTTP 请求头中标识发送请求的客户端软件相关信息的字段,用于让服务器识别客户端类型来提供适配内容。比如谷歌浏览器
-
即"wechat.yaml",信息如下:
-
cookie: ua_id=wuzWM9FKE14... user_agent: Mozilla/5.0...
-
JSON
-
appmsgid是每一次推送的唯一标识符,aid则是每篇推文的唯一标识符。
-
实际上,除了Cookie外,URL中的token参数也会用来限制爬虫
-
token参数:在网络应用中,token(令牌)参数是一种用于身份验证或授权访问的机制。 它是一个包含特定信息的字符串,通常是由服务器端生成并返回给客户端(可能在用户登录成功或者进行特定操作后)。这个字符串包含了用户的身份标识信息或者访问权限相关的内容,在URL中作为一个参数传递,当客户端向服务器发送请求时,服务器会验证这个token参数,以判断请求是否合法,从而限制未授权的访问,包括爬虫访问。就像是一张带有特殊编码的入场券,只有持有正确编码(合法token)的请求才能进入并获取相应的资源。
-
我将fakeid和token也存放在了"wechat.yaml"文件中,这是因为fakeid是每个公众号都特有的标识符,而token则会经常性变动,该信息既可以通过解析URL获取,也可以从开发者工具中查看
-
这是公众号的流量限制,通常需要等上30-60分钟才能继续。为了完美处理这个问题,你可能需要申请多个公众号,可能需要和微信公众号的登录系统斗智斗勇,或许还需要设置代理池。
-
工业级别的爬虫
-
mitmdump + 电脑版微信:
-
mitmdump 是 mitmproxy 工具套件中的一个命令行组件。mitmproxy 是一款用于中间人攻击(Man - in - the - Middle)的代理工具,不过它在安全测试、网络调试以及数据采集等合法场景中也被广泛应用。
-
mitmdump 主要用于拦截、查看和修改 HTTP/HTTPS 流量。它可以捕获网络请求和响应,并以编程的方式对这些流量进行处理,这使得它在分析网络通信和数据提取等任务中非常有用。
-
可视化抓包工具
-
https代理
-
offset这个关键参数来控制它的翻页
-
使用的pdfkit这个包 保存为pdf
-
代理服务器
-
局域网、公网:
-
我的另外一个作品: https://github.com/chyroc/lark ,基于代码生成的 Lark/飞书 Go SDK
-
SDK 即 Software Development Kit,软件开发工具包,是一些被软件工程师用于为特定的软件包、软件框架、硬件平台、操作系统等创建应用软件的开发工具的集合。而 Lark / 飞书 Go SDK 则是专门为 Go 语言开发者提供的,用于与飞书或 Lark 平台进行交互的一套工具和资源
-
常用功能:获取特定公众号信息 、搜索公众号、搜索微信文章、解析最近文章页、解析 首页热门 页
-
获取关键字联想词
-
获取cookie、fakeid、token三者的值:比如查看公众号文章。对于爬虫来说,获取 Cookie 可以让它模拟用户已经登录的状态,从而能够访问那些需要登录才能看到的内容。Fakeid 可以看作是某个店铺(在这个例子里是微信公众号)在一个大商场(微信公众号平台)里的店铺编号。每个公众号都有一个唯一的 Fakeid,就像每个店铺都有自己独特的编号一样。通过获取 Fakeid,就能够精准地定位到特定的公众号,方便去获取这个公众号相关的内容,比如文章列表、公众号信息等,这对于数据采集或者分析特定公众号的内容很有帮助。Token 就像是一个临时的密码或者钥匙。你在登录网站或者进行一些敏感操作(比如获取公众号后台的某些数据)的时候,网站除了给你 Cookie 这个 “会员卡”,还会给你一个 Token 作为额外的验证。这个 Token 是有有效期的,并且每次可能都不一样。对于数据获取来说,获取 Token 是为了告诉网站,你是经过授权的,可以访问相应的资源。如果没有正确的 Token,网站可能会拒绝你的访问,就像你没有正确的钥匙就打不开锁一样。
-
User-Agent:
User - Agent 就像是你在网络世界里的 “身份证” 或者 “名片”。
当你使用浏览器(如 Chrome、Firefox)或者其他软件(如手机应用)访问网站时,这个 “身份证” 会告诉网站你是用什么软件来访问的。它包含了软件名称(就像你的名字)、版本号(类似你的年龄阶段)、操作系统(如同你的家乡)这些信息。
网站就像一个接待处,它会查看你的 “身份证”,然后根据上面的信息来决定怎么接待你。比如,有些网站看到你是用手机浏览器访问,就会给你展示适合手机屏幕的页面;如果看到你是某个特定版本的软件来访问,就会提供这个版本所支持的功能。对于爬虫开发者来说,正确设置 User - Agent 就像是给自己的程序伪造一个合适的 “身份证”,让网站以为是正常的浏览器或者软件在访问,这样就更容易获取想要的内容。
-
票据:“票据”(如
pass_ticket
和appmsg_token
)是一种用于身份验证或者授权访问的凭证。就像是你进入一个需要门票的场所,这些票据就是允许你访问微信公众号文章数据接口的 “门票”。 -
爬取了某个微信公众号的全部文章的
文章链接 url
文章标题 title
发布时间 update_time
封面链接 cover
阅读数 read_num
在看数 like_num
-
微信公众号平台
-
begin代表的是页数,如果需要更多数据,肯定是需要翻页的。多次请求改变begin的值就可以了
-
监听
-
通用爬虫:爬取整个互联网上的信息,如 Google 和 百度 的爬虫。
-
特定爬虫:专注于特定主题或领域的信息,只爬取与特定主题相关的网页。
-
使用爬虫需遵守相关法律法规,和网站的 robots.txt 文件规定,避免对网站服务器造成过大负担。
所以,爬取网络资源,最重要的就是可以找到目标网站的 url 地址。
-
把 cookies、token 以及 fakeid,保存下来,这三者缺一不可。
有了上述这三个值,我们就可以编写 Python 代码了。
-
Selenium、Scrapy
3、常见爬虫方法
简单来说,只要你的行为跟普通用户不一样,他就会有办法阻止你爬取。企业级的爬虫需要长期维护,费时费力。爬虫简单来说就是爬、解、存。也就是进入网页(IP、cookie、user_agent、query、url等)、解析网页(分析网页结构才能用正确的代码提取出想要的信息)、存储想要的信息(文本、表格、json等)。网站检测爬虫行为的方式多种多样,以下是一些常见的检测方法及其简要介绍:
1. IP地址监控
黑名单:维护一个包含已知爬虫IP的黑名单,拒绝这些IP的请求。
速率限制:监测同一IP在短时间内的请求数量,如果超出设定阈值,可能会阻止后续请求。
2. User-Agent分析
识别请求中的User-Agent字符串,检测是否是常见的爬虫或自动化工具(如Selenium、Scrapy等)。
3. 请求频率分析
监测请求的间隔时间,如果请求速度过快(如每秒多个请求),可能被视为爬虫。
4. 行为模式分析
记录用户在网站上的行为模式,如鼠标移动、点击、滚动等。爬虫通常无法模拟这些行为。
5. Cookies和会话管理
通过Cookies跟踪用户会话,如果发现会话异常(如快速切换IP),可能会阻止访问。
6. CAPTCHA
在怀疑是爬虫的情况下,向用户呈现人机验证(如验证码),要求进行额外的验证。
7. JavaScript挑战
使用JavaScript脚本验证用户是否为真实用户,例如要求用户执行特定的操作(如点击按钮)。
8. Referer检查
检查HTTP请求头中的Referer字段,以确定请求是否来自合法的来源。
9. 页面内容动态加载
通过AJAX等方式动态加载内容,只有通过正常的浏览器操作才能完全加载页面。
10. 异常流量监测
监控流量模式,检测异常流量(如在短时间内从多个IP或相同IP发送大量请求)。
11. 地理位置监控
监控请求的地理位置,识别来自异常或不常见地区的请求。
12. 数据模式分析
分析请求的数据模式和内容,识别是否有爬虫特征,如重复请求相同内容等。
13. 使用爬虫检测服务
一些网站使用第三方服务(如Cloudflare、Distil Networks等)来检测和阻止爬虫流量。
14. HTTP头部异常检查
检查HTTP请求中是否缺少某些必需的头部,或是否包含不寻常的头部。
15. 行为时间模式分析
记录用户在页面上的停留时间和行为时长,爬虫的行为通常会显示出与普通用户不同的时间模式。例如,用户通常在页面上停留的时间相对较长,而爬虫可能会迅速请求多个页面。
16. 会话验证
网站可以要求用户进行一些额外的交互(如拖动滑块、点击特定区域),通过这种方式验证用户的真实性。
17. 多重验证机制
使用多种验证方式(如手机号验证、邮箱验证等)来确保用户的身份,尤其是在检测到可疑行为时。
18. Javascript 和 Cookie 依赖
一些网站依赖JavaScript来加载内容,只有在用户启用JavaScript的情况下,才能正确加载页面内容。如果请求没有执行JavaScript,可能会导致内容加载不完整。
19. 隐形字段检测
网站可以在表单中添加一些隐形字段(例如,使用CSS隐藏的字段),当用户提交表单时,如果这些字段被填充,说明是爬虫。
20. 指纹识别
通过浏览器指纹技术(如查看用户的屏幕分辨率、字体、浏览器插件等)来识别用户,创建一个唯一的标识来跟踪用户行为。
21. 数据收集行为分析
分析访问的页面和请求的数据,识别是否有异常的访问模式,比如连续访问相同的资源。
22. 特定请求参数监测
监测请求中是否包含异常的参数,比如请求某个特定文件或数据的频率是否过高。
23. WebSocket 监测
如果网站使用WebSocket进行实时通信,可以监测通过WebSocket发送的消息,识别爬虫的异常行为。
24. 爬虫模拟检测
一些网站可能会向访问者提供模拟操作的挑战,观察用户是否能够正确完成这些挑战(如拖动、点击等)。
25. 综合分析工具
利用机器学习和AI技术分析用户行为,识别异常流量和潜在的爬虫,自动化检测和防御机制。
26. 访问来源分析
检查访问来源(如搜索引擎、社交媒体等),如果流量来源异常(如直接从搜索引擎大量访问),可能会被标记为爬虫。
27. Cookie重用检测
监测同一Cookie在多个IP或设备上的重复使用,检测异常的Cookie行为。
28. 重复内容检测
分析请求内容和响应数据,如果发现大量相同的请求和响应,可能会被视为爬虫。
29. 页面元素分析
检查请求中是否包含未渲染的页面元素或不必要的请求,爬虫通常不会渲染页面所有元素。
30. HTTP请求模式识别
识别常见的HTTP请求模式,爬虫的请求模式往往与普通用户有所不同(例如,缺少常见的GET或POST请求)。
31. 异常会话结束监测
监测用户会话的异常结束情况,如用户突然离开页面或关闭浏览器,可能表明是爬虫。
32. 重定向监测
如果用户在短时间内被重定向到多个页面,可能会被标记为爬虫行为。
33. HTTP错误率监控
监测特定IP的HTTP错误率(如404、403等),高错误率可能表明该IP在进行爬虫行为。
34. 动态内容监控
对于依赖动态内容的网站,可以通过监测数据请求的频率和模式来识别异常流量。
35. 多层安全策略
部署多层安全机制,包括防火墙、入侵检测系统(IDS)、入侵防御系统(IPS)等,增强对爬虫的防御能力。
36. 内容重写和加密
通过对页面内容进行重写或加密,增加爬虫解析的难度,从而阻止自动化工具的有效访问。
37. 智能监控系统
使用AI驱动的监控系统,实时分析用户行为,并识别潜在的爬虫活动。
38. 用户反馈机制
引入用户反馈机制,允许用户报告可疑活动,从而进一步加强检测。
39. 接入点和流量分析
分析接入点(如API接口)和流量模式,识别频繁请求特定接口的异常行为。
40. 人工智能反欺诈系统
利用先进的人工智能反欺诈系统,通过大数据分析和模型识别潜在爬虫。
41. 定期更换API密钥
定期更换API密钥并要求使用者更新密钥,以降低被爬虫攻击的风险。
42. 异步请求分析
监测是否有过多的异步请求(如通过XHR发送的请求),这些请求的行为可能与正常用户的交互模式不符。
43. 事件监听器检测
利用JavaScript监听用户的交互事件,如鼠标点击和键盘输入,如果没有正常事件触发,可能会被视为爬虫。
44. 特征工程
利用机器学习技术构建特征模型,根据用户的行为特征(如访问顺序、请求内容)来判断是否为爬虫。
45. 异常地理访问模式
检测同一用户在短时间内从不同地理位置频繁切换,可能暗示爬虫行为。
46. 会话持久性监测
检测会话持久性,若用户在极短时间内频繁创建新会话,可能被视为爬虫。
47. 时间戳验证
在请求中加入时间戳参数,检查时间戳是否与服务器时间一致,以识别伪造请求。
48. 服务器负载分析
监控