VBA网页爬虫无预警失效,网站可访问、代码未改动如何排查
故障原因排查清单
IP临时封禁(你提到的可能性确实存在)
大部分电商站点都有反爬策略,频繁无标识的爬虫请求会被WAF(Web应用防火墙)识别后触发临时封禁,封禁时长通常从数分钟到24小时不等。你可以用无痕浏览器手动访问目标链接验证:如果弹出人机验证、访问拦截提示,就是触发了封禁规则。
你当前的XMLHTTP请求没有携带任何正常浏览器的请求头,非常容易被识别为爬虫,建议后续请求补充User-Agent、Referer等请求头,同时降低请求频率。站点前端DOM结构更新
站点随时可能迭代前端代码,修改元素类名、结构,你之前使用的div.product_name a选择器大概率已经失效。你可以先将请求返回的.responseText写入本地txt文件或者Excel单元格,搜索目标商品名称对应的元素类名是否已经变更,调整选择器即可解决。站点改为动态渲染内容
如果静态HTML的.responseText里完全搜索不到你要的商品名称,说明站点已经将商品数据改为JS异步加载,你用XMLHTTP拿到的只是空的页面骨架,没有实际渲染的商品数据。这种情况需要改用浏览器自动化工具模拟真实浏览器加载页面,或者抓包找到站点返回商品数据的API接口直接请求。请求本身未正常返回
你可以在.send之后加一行状态码判断,检查http.Status是否为200:如果返回403说明请求被拦截,返回404说明链接已失效,返回5xx说明站点服务器故障。另外也可能是站点升级了TLS版本,XMLHTTP60默认的协议版本不匹配导致请求失败,可以在系统Internet选项里开启更高版本的TLS支持。Cookie校验规则新增
现在很多站点会要求请求必须携带首次访问时下发的Cookie,你之前发裸请求能成功是因为站点没开这个校验,现在规则更新后无Cookie的请求会被直接拦截,需要你先获取响应头里的Set-Cookie内容,后续请求带上Cookie再发送。
内容的提问来源于stack exchange,提问作者Ahti

