Google vs Bing SERP Scraping: Kluczowe różnice

Porównaj różnice techniczne między zeskrobywaniem wyników wyszukiwania Google i Bing. Obejmuje poziomy wykrywania anty-bot, struktury HTML, wymagania proxy i przykłady kodu dla obu silników.

Google vs Bing SERP Scraping: Kluczowe różnice

Dlaczego porównywać Google i Bing Scraping?

Podczas gdy Google dominuje wyszukiwania z ponad 90% udziału w rynku na całym świecie, Bing posiada znaczny udział w konkretnych rynkach: około 9% w Stanach Zjednoczonych, wyższy wśród użytkowników przedsiębiorstw, i uprawnia do wyszukiwania wyników dla DuckDuckGo, Yahoo, i Ecosia. Dla kompleksowego monitorowania SERP, śledzenie obu wyszukiwarek daje bardziej kompletny obraz swojej widoczności organicznej.

Różnice techniczne między skrobaniem Google a Bing są znaczne. Każda wyszukiwarka ma różne struktury HTML, ochrony anty-bot, ograniczenie prędkości i wymagania proxy. Ten przewodnik łamie te różnice, dzięki czemu można budować skrobaczki, które działają niezawodnie dla obu.

Dla podstawowych koncepcji SERP scrating, zacząć od naszych SERP skrobanie z przewodnikiem proxy.

Porównanie ochrony anty- bot

Największą różnicą między Google a Bing jest to, jak agresywnie każda wyszukiwarka wykrywa i blokuje automatyczne żądania.

Metoda wykrywaniaGoogleBing
Ograniczenie stawki IPBardzo agresywne - bloki po ~ 10- 20 zapytaniach / godzinach na IPŚrednia - toleruje ~ 30- 50 zapytań / godzin na IP
Wyzwania związane z CAPTCHACzęste reCAPTCHA na podejrzanych IPMniej częste, wykorzystuje prostsze wyzwania
Detekcja IP DatacenterAktywne bloki znanych zakresów danychMniej rygorystyczne - proxy datacenter często działają
Pobieranie odcisków palców przez przeglądarkęZaawansowane pobieranie odcisków palców TLS / JSPodstawowe kontrole nagłówka i agenta User-
Analiza behawioralnaWyrafinowane wykrywanie wzorcówMniej wyrafinowane
Egzekwowanie plików cookieŚlady i walidaty plików cookieMniej zależne od zachowania ciasteczek
Klucz na wynos: Bing jest znacznie łatwiejszy do skrobania niż Google. Można często używać proxy datacenter dla Bing w umiarkowanych tomach, podczas gdy Google prawie zawsze wymaga proxy mieszkaniowe dla wiarygodnych wyników.

Różnice struktury HTML

Google i Bing używają zupełnie różnych struktur HTML dla swoich wyników wyszukiwania, wymagających oddzielnej logiki parsowania.

Struktura 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

Struktura 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

Porównanie wyników SERP

Oba wyszukiwarki wyświetlają bogate funkcje SERP poza standardowymi, niebieskimi linkami, ale różnią się w formacie i częstotliwości:

CechaGoogleBing
Promowane skrawkiCzęsto div.xpdopenMniej powszechne - div.b_ans
Ludzie też pytająBardzo często - div.related-question-pairObecny jako "Ludzie również zapytać" - div.b_rs
Opakowanie lokalneMapa z 3 wynikami - div.VkpGBbMapa z listami - div.b_localA
Panel wiedzyPrawy pasek boczny - div.kp-wholepagePrawy pasek boczny - div.b_entityTP
Karuzela obrazkowaGórna lub wewnętrzna - div.ULSxyfTop - div.imgpt
Wyniki wideoFormat karuzeliFormat siatki - div.b_vidAns
Powiązane wyszukiwanieNa dole... div.s75CSdDół i bok - div.b_rs

Kompletny rozdrabniacz silnika dual- Engine

Oto ujednolicony procesor Pythona, który obsługuje zarówno Google jak i Bing:

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 Dual- Scraper silnika

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

Porównanie wymogów proxy

Strategia proxy dla każdego silnika powinna się różnić w zależności od poziomu ich wykrywania:

Dla Google

  • Typ proxy: Proxy mieszkaniowe wymagane do uzyskania wiarygodnych wyników
  • Obrót: Obróć IP na każde żądanie
  • Stawka: 1-2 wniosków na minutę na IP
  • Nagłówki: Pełny zestaw nagłówków typu browser- z nagłówkami Sec- Ch- Ua, Sec- Fetch
  • Cel geograficzny: Dopasowanie lokalizacji proxy z parametrami gl / hl

Dla Bing

  • Typ proxy: Proxy Datacenter często wystarczające; mieszkalne dla skali
  • Obrót: Czy można ponownie wykorzystać IP dla 3- 5 wniosków przed obrotem
  • Stawka: 3-5 wniosków na minutę na IP
  • Nagłówki: Standardowe nagłówki User- Agent i Akceptuj zazwyczaj wystarczające
  • Cel geograficzny: Użyj parametru cc; geodopasowanie IP mniej krytyczne

ProxyHat proxy mieszkalne pracować optymalnie dla obu silników. Dla Bing- tylko skrobanie przy umiarkowanej objętości, proxy datacenter może wystarczyć, ale proxy mieszkaniowe z ProxyHat zapewniają spójne wyniki w obu silnikach bez konieczności oddzielnej infrastruktury. Patrz dokumentacja dla szczegółów konfiguracji.

Porównanie parametrów URL

CelParametr GoogleParametr Bing
Wyszukaj zapytanieqq
Wyniki na stronęnum (10- 100)count (1-50)
Odroczenie wynikustartfirst
Krajglcc
Językhlsetlang
Bezpieczne wyszukiwaniesafesafeSearch
Wyłącz personalizacjępws=0N / A (mniej spersonalizowane domyślnie)
Weryfikacja lokalizacjiuulelocation

Kiedy śledzić oba silniki

Śledzenie zarówno Google jak i Bing jest szczególnie cenne w tych scenariuszach:

  • Rynki przedsiębiorstw: Bing ma większy udział w rynku wśród użytkowników korporacyjnych dzięki integracji Microsoft Edge i Windows
  • Koncentracja rynku amerykańskiego: Bing posiada około 9% amerykańskiego ruchu poszukiwawczego, reprezentującego miliony potencjalnych odwiedzających
  • Poszukiwanie głosu: Moc Bing Cortana i niektóre wyniki asystenta głosu
  • Różnorodność algorytmów: Ranking dobrze na Bing często wymaga różnych strategii optymalizacji niż Google
  • DuckDuckGo i Yahoo ruchu: Oba używają indeksu Bing, więc rankingi Bing wpływają również na te platformy

Postępowanie z przypadkami krawędzi

Rynek Bing - specyficzne domeny

W przeciwieństwie do Google, który wykorzystuje google.com z gl parametr dla wszystkich krajów, Bing ma domeny specyficzne dla kraju:

# 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",
}

Różne paginacje

# 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}
Najskuteczniejszym podejściem jest budowa wielosilnikowego nadajnika SERP z jednolitą infrastrukturą proxy. ProxyHat residential proxy obsługują zarówno Google jak i Bing z tym samym połączeniem, upraszczając swoją architekturę przy jednoczesnym zapewnieniu niezawodnych wyników z obu silników.

Więcej na temat budowy solidnej infrastruktury skrawania, zobacz nasze przewodniki na przy użyciu proxy w Python, przy użyciu proxy w Node.js, i nasze najlepsze proxy do skrobania stron internetowych Przegląd. Sprawdź ProxyHat SERP rozwiązań śledzenia dla konfiguracji dopasowanych.

Gotowy, aby zacząć?

Dostęp do ponad 50 mln rezydencjalnych IP w ponad 148 krajach z filtrowaniem AI.

Zobacz cenyProxy rezydencjalne
← Powrót do Bloga