Google vs Bing SERPスクレイピング:主な違い

GoogleとBing検索結果のスクレイピングの違いを比較します。 アンチボット検出レベル、HTML構造、プロキシ要件、および両方のエンジンのコード例をカバーします.

Google vs Bing SERPスクレイピング:主な違い

なぜGoogleとビングスクレイピングを比較するのですか?

Googleは、全世界で90%以上の市場シェアで検索をしていますが、Bingは特定の市場で重要なシェアを保有しています。米国では約9%、企業ユーザー間で高く、DuckDuckGo、Yahoo、Ecosiaの検索結果が出力されます。 包括的なSERP監視のために、両方の検索エンジンを追跡すると、あなたの有機性可視性のより完全なビューが得られます。

Google と Bing のスクレイピングとの間の技術的な違いは相当します。 各検索エンジンには、異なるHTML構造、アンチボット保護、レート制限、プロキシ要件があります。 このガイドは、これらの違いを分解し、両方に確実に動作するスクレーパーを構築することができます。

基礎SERPスクレーピングの概念のために、私達の始めて下さい プロキシガイドによるSERPスクレイピング. .

アンチボット保護比較

GoogleとBingスクレイピングの最大の違いは、各検索エンジンが自動リクエストを検出してブロックする方法です。

アンチボット保護比較
検出方法サイトマップログイン
IP率制限非常に積極的な — IP ごとの ~10-20 の問い合わせ/時間の後のブロックモデレート — IPごとの30-50の問い合わせ/時間許容
CAPTCHAの課題疑わしいIP上の頻繁なreCAPTCHA少ない頻繁で、単純な課題を使用する
データセンターIP検出既知のデータセンター範囲をアクティブにブロック厳しい — データセンターのプロキシが頻繁に機能する
ブラウザの指紋高度なTLS/JS指紋基本的なヘッダーとユーザーエージェントのチェック
行動分析洗練されたパターン検出洗練された
クッキーの執行クッキーの追跡と検証クッキーの動作に依存しない
主要なテイクアウト:ビングはGoogleよりもスクレイピングが大幅に容易です。 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

ビング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機能を表示しますが、それらはフォーマットと周波数で異なる:

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']}")

Node.js デュアルエンジンスクレーパー

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');

プロキシ要件の比較

各エンジンのプロキシ戦略は、検出レベルによって異なります。

Googleの

  • プロキシタイプ: 信頼性の高い結果に必要な住宅用プロキシ
  • 回転: リクエストごとにIPを回転させる
  • レート: IPごとの1分あたりの1-2の要求
  • ヘッダー: Sec-Ch-Ua、Sec-Fetch ヘッダで設定されたフル ブラウザのようなヘッダ
  • ジオターゲティング: gl/hl パラメータでプロキシの場所を一致して下さい

ビングのため

  • プロキシタイプ: データセンターのプロキシは、多くの場合、十分な; スケールのための住宅
  • 回転: 回転前に3-5の要求のためのIPsを使用できます
  • レート: IPごとの3-5リクエスト
  • ヘッダー: 標準的なユーザーエージェントと受け入れヘッダーは通常十分な
  • ジオターゲティング: cc パラメータを使用する。IP ジオマッチングが少ないクリティカル

ProxyHat住宅プロキシ どちらのエンジンにも最適です。 適度なボリュームでBingだけスクレイピングのために、データセンターのプロキシは十分かもしれませんが、ProxyHatの住宅プロキシは、別々のインフラストラクチャを必要としない両方のエンジン間で一貫した結果を提供します。 参照して下さい ドキュメント セットアップの詳細のため。

URL パラメータの比較

URL パラメータの比較
ミッションGoogleの変数ビング変数
検索クエリqq
ページごとの結果num (10-100)count (1-50)
結果のオフセットstartfirst
カントリーglcc
用語集hlsetlang
安全な検索safesafeSearch
無効なパーソナライゼーションpws=0N/A(デフォルトでパーソナライズ)
ロケーション オーバーライドuulelocation

両方のエンジンを追跡するとき

GoogleとBingの両方の追跡は、これらのシナリオで特に価値があります。

  • 企業市場: Bingはマイクロソフト・エッジおよびWindowsの統合による企業のユーザー間のより高い市場シェアがあります
  • 米国市場焦点: Bingは、潜在的な訪問者の何百万人を代表する米国の検索トラフィックの約9%を保持しています
  • 音声検索: ビングパワー コルタナといくつかの声アシスタントの結果
  • アルゴリズムの多様性: Bingでよくランキングは、Googleよりも異なる最適化戦略が必要です
  • DuckDuckGoとYahooトラフィック: Bing のインデックスを使用するので、Bing のランキングはこれらのプラットフォームにも影響します

エッジケースの処理

ビング市場特異ドメイン

Googleとは違う google.com お問い合わせ gl すべての国のためのパラメータ、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トラッカーの構築は、最も効率的なアプローチです。 ProxyHat 住宅のプロキシは、両方のエンジンから信頼性の高い結果を確保しながら、あなたのアーキテクチャを簡素化し、同じ接続で Google と Bing の両方を処理します。

堅牢なスクレイピングインフラを構築するには、ガイドを参照してください Pythonでプロキシを使う, Node.js でプロキシを使用するお問い合わせ ウェブスクレイピングに最適なプロキシ 概要。 チェックイン ProxyHat SERPトラッキングソリューション 調整された構成のため。

始める準備はできましたか?

AIフィルタリングで148か国以上、5,000万以上のレジデンシャルIPにアクセス。

料金を見るレジデンシャルプロキシ
← ブログに戻る