You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过PHP cURL获取Bing搜索结果计数?有哪些替代方案

问题根因

你之前的cURL抓取逻辑失效,本质是Bing的反爬策略升级:未携带合法浏览器指纹、未通过前置cookie校验的请求,会直接返回未完成前端渲染的残缺HTML页面,本身就不包含承载搜索结果计数的DOM模块,不是页面CSS选择器变更导致的。
异常返回的残缺页示例:
cURL返回的无计数模块的Bing页面

基于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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.27 18:06:33