如何通过PHP cURL获取Bing搜索结果计数?有哪些替代方案
问题根因
你之前的cURL抓取逻辑失效,本质是Bing的反爬策略升级:未携带合法浏览器指纹、未通过前置cookie校验的请求,会直接返回未完成前端渲染的残缺HTML页面,本身就不包含承载搜索结果计数的DOM模块,不是页面CSS选择器变更导致的。
异常返回的残缺页示例:
基于cURL的临时修复方案
通过补全cURL请求的浏览器特征、模拟真实用户访问路径,可以在部分场景下拿到带结果计数的完整HTML,配置要求如下:
- 开启cURL的cookie持久化,使用
CURLOPT_COOKIEJAR和CURLOPT_COOKIEFILE指定同一个本地cookie存储文件,先请求Bing首页获取初始反爬校验cookie,间隔1-2秒再发起搜索请求,请求频率控制在1次/3秒以上,避免触发频率拦截 - 补全真实浏览器请求头,禁止使用cURL默认UA,必须携带和UA匹配的Accept、Accept-Language、编码标识头,Referer固定为Bing域名
- 开启gzip/br解压支持,避免拿到乱码响应
最小可运行代码示例:
<?php $cookiePath = __DIR__ . '/bing_cookie.tmp'; $searchKeyword = 'site:your-domain.com'; // 替换为实际查询关键词 // 初始化cURL $ch = curl_init(); curl_setopt_array($ch, [ CURLOPT_RETURNTRANSFER => true, CURLOPT_FOLLOWLOCATION => true, CURLOPT_SSL_VERIFYPEER => false, CURLOPT_ENCODING => 'gzip, deflate, br', CURLOPT_USERAGENT => 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126.0.0.0 Safari/537.36 Edg/126.0.0.0', CURLOPT_HTTPHEADER => [ 'Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8', 'Accept-Language: zh-CN,zh;q=0.9,en;q=0.8' ], CURLOPT_COOKIEJAR => $cookiePath, CURLOPT_COOKIEFILE => $cookiePath ]); // 先访问首页落cookie curl_setopt($ch, CURLOPT_URL, 'https://www.bing.com/'); curl_exec($ch); sleep(rand(1,2)); // 发起搜索请求 curl_setopt($ch, CURLOPT_URL, 'https://www.bing.com/search?q=' . urlencode($searchKeyword)); curl_setopt($ch, CURLOPT_REFERER, 'https://www.bing.com/'); $response = curl_exec($ch); curl_close($ch); // 提取结果计数,当前版本Bing计数DOM节点class为b_count if (preg_match('/class="b_count[^"]*"[^>]*>.*?([\d,]+)\s*条?结果/is', $response, $match)) { $resultCount = (int)str_replace(',', '', $match[1]); var_dump($resultCount); } else { // 命中反爬策略,未拿到有效页面 var_dump('请求被拦截'); }
cURL方案的固有缺陷
这个方案仅能作为临时修复,稳定性没有保障:
- Bing反爬规则迭代频繁,一旦UA版本失效、cookie校验逻辑调整,会再次返回残缺页面
- 服务器出口IP一旦被标记为爬虫地址,无论怎么修改请求头都会触发验证码拦截,无法拿到有效内容
- 部分地区的Bing节点已将结果计数改为JS动态渲染,静态HTML中不包含该字段,纯cURL请求无法获取渲染后的内容
稳定替代方案
- 优先使用官方Bing Web Search API:返回结构化JSON数据,直接读取
webPages.totalEstimatedMatches字段即可获得结果计数,无反爬问题,免费层每月提供1000次调用额度,付费层成本极低,是生产环境的首选方案 - 无头浏览器渲染方案:如果不想调用官方API,可接入Playwright/Puppeteer驱动真实Chromium内核访问页面,等待JS渲染完成后再提取DOM内容,关闭自动化标识后反爬通过率远高于纯cURL方案
- 第三方搜索数据服务:直接调用已经做好反爬适配的第三方接口获取结果计数,无需自行维护爬虫逻辑
内容的提问来源于stack exchange,提问作者user19153785
相关产品推荐
相关产品推荐

