Google vs Bing SERP爬取:关键差异

比较刮掉Google和Bing搜索结果的技术差异. 涵盖反机器人检测级别,HTML结构,代理要求,以及两个引擎的代码示例.

Google vs Bing SERP爬取:关键差异

为什么比较谷歌和Bing Scraping?

虽然Google在全球搜索中占据了超过90%的市场份额,但Bing在具体市场中占有很大份额:在美国约为9%,在企业用户中更高,它为DuckDuckGo、Yahoo和Ecosia的搜索结果提供了权力。 对于全面的SERP监控, 跟踪两个搜索引擎 让你更完整地查看你的有机可见度。

刮掉Google和Bing之间的技术差异很大. 每个搜索引擎都有不同的HTML结构,反机器人保护,速率限制,以及代理要求. 这个指南打破了这些差异,这样你就可以建造对两者都可靠的刮刮机.

对于基础的SERP刮刮概念,从我们 带有代理指南的 SERP 刮刮。 。 。

防毒保护比较

Google与Bing刮刮的最大区别在于,

检测方法谷歌
限制IP比率非常积极的——每个IP ~ 10-20 询问/小时后的区块中度——每个IP允许~30-50查询/小时
CAPTCHA 挑战关于可疑IP的经常联系频率较低,使用更简单的挑战
数据中心IP检测活动区块已知数据中心范围不太严格——数据中心代词经常起作用
浏览器指纹高级 TLS/ JS 指纹基本头和用户代理检查
行为分析精密的图案检测不太精细
Cookie 执行跟踪和验证饼干少依赖饼干行为
关键外卖:Bing比Google的刮刮要容易得多. 在中等量时,你经常可以使用数据中心代言人Bing,而Google几乎总是需要住宅代言人才能取得可靠的结果.

HTML 结构差异

Google和Bing对其搜索结果使用完全不同的HTML结构,需要单独的解析逻辑.

Google SERP 结构

# Google organic result selectors
# Container: div#search .g
# Title: h3
# URL: a[href]
# Snippet: .VwiC3b or div[data-snf]
from bs4 import BeautifulSoup
def parse_google(html):
    soup = BeautifulSoup(html, "html.parser")
    results = []
    for g in soup.select("div#search .g"):
        title = g.select_one("h3")
        link = g.select_one("a")
        snippet = g.select_one(".VwiC3b")
        if title and link:
            results.append({
                "title": title.get_text(),
                "url": link["href"],
                "snippet": snippet.get_text() if snippet else "",
            })
    return results

Bing SERP结构

# Bing organic result selectors
# Container: li.b_algo
# Title: h2 a
# URL: cite
# Snippet: p.b_lineclamp2 or div.b_caption p
def parse_bing(html):
    soup = BeautifulSoup(html, "html.parser")
    results = []
    for item in soup.select("li.b_algo"):
        title_el = item.select_one("h2 a")
        snippet_el = item.select_one("p.b_lineclamp2") or item.select_one("div.b_caption p")
        cite_el = item.select_one("cite")
        if title_el:
            results.append({
                "title": title_el.get_text(),
                "url": title_el["href"],
                "snippet": snippet_el.get_text() if snippet_el else "",
                "display_url": cite_el.get_text() if cite_el else "",
            })
    return results

SERP 特性比较

两种搜索引擎都表现出超越标准蓝链接的丰富的SERP特性,但它们在格式和频率上有所不同:

特性谷歌
特性片段常见—— div.xpdopen不太常见的—— div.b_ans
人们也问非常常见的—— div.related-question-pair现为"人们也问"—— div.b_rs
当地包3个结果的地图—— div.VkpGBb有列表的地图—— div.b_localA
知识小组右侧栏- div.kp-wholepage右侧栏- div.b_entityTP
图像旋转木马顶部或内置- div.ULSxyf顶级 - div.imgpt
视频结果旋转木马格式网格格式 - div.b_vidAns
相关搜索底层 - div.s75CSd下边和侧边栏 - div.b_rs

完整的双引擎扫描器

以下是一个处理Google和Bing的统一的Python刮刀:

import requests
from bs4 import BeautifulSoup
import time
import random
import json
PROXY_URL = "http://USERNAME:PASSWORD@gate.proxyhat.com:8080"
USER_AGENTS = [
    "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0.0.0 Safari/537.36",
    "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0.0.0 Safari/537.36",
]
def scrape_serp(keyword, engine="google", country="us"):
    """Scrape SERP from Google or Bing."""
    proxies = {"http": PROXY_URL, "https": PROXY_URL}
    headers = {
        "User-Agent": random.choice(USER_AGENTS),
        "Accept-Language": "en-US,en;q=0.9",
        "Accept": "text/html,application/xhtml+xml",
    }
    if engine == "google":
        url = "https://www.google.com/search"
        params = {"q": keyword, "num": 10, "hl": "en", "gl": country}
    else:
        url = "https://www.bing.com/search"
        params = {"q": keyword, "count": 10, "cc": country}
    response = requests.get(
        url,
        params=params,
        headers=headers,
        proxies=proxies,
        timeout=15,
    )
    response.raise_for_status()
    soup = BeautifulSoup(response.text, "html.parser")
    if engine == "google":
        return parse_google_results(soup)
    else:
        return parse_bing_results(soup)
def parse_google_results(soup):
    results = []
    for i, g in enumerate(soup.select("div#search .g"), 1):
        title = g.select_one("h3")
        link = g.select_one("a")
        snippet = g.select_one(".VwiC3b")
        if title and link:
            results.append({
                "position": i,
                "title": title.get_text(),
                "url": link["href"],
                "snippet": snippet.get_text() if snippet else "",
            })
    return results
def parse_bing_results(soup):
    results = []
    for i, item in enumerate(soup.select("li.b_algo"), 1):
        title_el = item.select_one("h2 a")
        snippet_el = item.select_one("p.b_lineclamp2") or item.select_one("div.b_caption p")
        if title_el:
            results.append({
                "position": i,
                "title": title_el.get_text(),
                "url": title_el["href"],
                "snippet": snippet_el.get_text() if snippet_el else "",
            })
    return results
# Compare rankings across both engines
keyword = "best web scraping proxies"
google_results = scrape_serp(keyword, "google")
time.sleep(random.uniform(3, 6))
bing_results = scrape_serp(keyword, "bing")
print(f"\n=== Google Results for '{keyword}' ===")
for r in google_results[:5]:
    print(f"  #{r['position']}: {r['title']}")
print(f"\n=== Bing Results for '{keyword}' ===")
for r in bing_results[:5]:
    print(f"  #{r['position']}: {r['title']}")

双引擎扫描器

const axios = require('axios');
const cheerio = require('cheerio');
const { HttpsProxyAgent } = require('https-proxy-agent');
const agent = new HttpsProxyAgent('http://USERNAME:PASSWORD@gate.proxyhat.com:8080');
async function scrapeSERP(keyword, engine = 'google') {
  const config = engine === 'google'
    ? { url: 'https://www.google.com/search', params: { q: keyword, num: 10, hl: 'en', gl: 'us' } }
    : { url: 'https://www.bing.com/search', params: { q: keyword, count: 10 } };
  const { data } = await axios.get(config.url, {
    params: config.params,
    headers: {
      'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36',
      'Accept-Language': 'en-US,en;q=0.9',
    },
    httpsAgent: agent,
    timeout: 15000,
  });
  const $ = cheerio.load(data);
  if (engine === 'google') {
    return parseGoogle($);
  }
  return parseBing($);
}
function parseGoogle($) {
  const results = [];
  $('div#search .g').each((i, el) => {
    const title = $(el).find('h3').text();
    const url = $(el).find('a').attr('href');
    const snippet = $(el).find('.VwiC3b').text();
    if (title && url) results.push({ position: i + 1, title, url, snippet });
  });
  return results;
}
function parseBing($) {
  const results = [];
  $('li.b_algo').each((i, el) => {
    const titleEl = $(el).find('h2 a');
    const title = titleEl.text();
    const url = titleEl.attr('href');
    const snippet = $(el).find('p.b_lineclamp2').text() || $(el).find('div.b_caption p').text();
    if (title && url) results.push({ position: i + 1, title, url, snippet });
  });
  return results;
}
async function compareEngines(keyword) {
  const [google, bing] = await Promise.all([
    scrapeSERP(keyword, 'google'),
    scrapeSERP(keyword, 'bing'),
  ]);
  console.log(`\nGoogle (${google.length} results):`);
  google.slice(0, 5).forEach(r => console.log(`  #${r.position}: ${r.title}`));
  console.log(`\nBing (${bing.length} results):`);
  bing.slice(0, 5).forEach(r => console.log(`  #${r.position}: ${r.title}`));
}
compareEngines('residential proxy service');

代理要求比较

每个引擎的代用策略应根据其检测水平而有所不同:

对于谷歌

  • 代理类型 : 可靠结果所需的住所代用
  • 旋转 : 在每个请求中旋转 IP
  • 比例 : 每个实施伙伴每分钟1-2个请求
  • 页眉 : 带有 Sec-Ch-Ua, Sec-Fetch 头的完整浏览器类头集
  • 地理目标: 用 gl/hl 参数匹配代理服务器位置

给Bing的

  • 代理类型 : 数据中心代表往往足够;规模居住
  • 旋转 : 在旋转前, 3-5 个请求可以重新使用 IP
  • 比例 : 每个实施伙伴每分钟提出3-5项请求
  • 页眉 : 标准用户代理和接受信头通常足够
  • 地理目标: 使用 cc 参数; IP 地理比对比较少

代理哈特住宅代理 两台引擎都最佳工作 对于中等体积的仅Bing型刮刮,数据中心代用品可能就足够了,但来自ProxyHat的住宅代用品在两台发动机上提供一致的结果,而不需要单独的基础设施. 参见 文档 为设置细节。

URL 参数比较

目的谷歌参数宾式参数
搜索查询qq
每页结果num (10-100) (中文(简体) ).count (单位:千美元)
页:1startfirst
国家glcc
语言hlsetlang
安全搜索safesafeSearch
禁用个性化pws=0N/A(默认减少个性化)
位置覆盖uulelocation

何时跟踪两个引擎

追踪Google和Bing在这些情景中尤其有价值:

  • 企业市场: 由于Microsoft Edge和Windows集成,Bing公司用户的市场份额较高
  • 美国市场焦点: Bing拥有约9%的美国搜索流量,代表着数百万潜在的访客
  • 语音搜索 : Cortana和一些语音助理结果
  • 算法多样性: 在Bing上的排名往往需要与Google不同的优化策略
  • DuckDuckGo和雅虎的交通往来: 两者都使用Bing的索引,所以Bing的排名也影响了这些平台

处理边缘案件

Bing 市场特定领域

与使用 Google 不同的是 google.comgl 对于所有国家,Bing有针对具体国家的领域:

# Bing country-specific URLs
BING_DOMAINS = {
    "us": "https://www.bing.com/search",
    "uk": "https://www.bing.co.uk/search",
    "de": "https://www.bing.de/search",
    "fr": "https://www.bing.fr/search",
    "jp": "https://www.bing.co.jp/search",
}

不同的倾角

# Google pagination: start parameter (0, 10, 20, ...)
google_page_2 = {"q": "query", "start": 10, "num": 10}
# Bing pagination: first parameter (1, 11, 21, ...)
bing_page_2 = {"q": "query", "first": 11, "count": 10}
建立具有统一代理基础设施的多引擎SERP跟踪器是最有效的方法. 代理Hat住宅代理处理Google和Bing的连接相同,简化了您的架构,同时确保两个引擎的可靠结果.

关于建设强力刮刮基础设施的更多信息,请参见我们的指南: 使用 Python 中的代理, (中文). 使用节点中的代理,我们 网络刮刮的最佳代理 概览。 检查 代理Hat SERP 跟踪解决方案 为定制配置。

准备开始了吗?

通过AI过滤访问148多个国家的5000多万个住宅IP。

查看价格住宅代理
← 返回博客