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
W tym artykule

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.

Porównanie ochrony anty- bot
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:

Porównanie wyników SERP
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

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.

Często zadawane pytania

Is Bing easier to scrape than Google?

Yes, significantly. Bing has less aggressive anti-bot protection, tolerates higher request rates per IP, and often works with datacenter proxies at moderate volumes. Google requires residential proxies and much more careful request management.

Do I need different parsers for Google and Bing?

Yes. Google and Bing use completely different HTML structures and CSS class names for their search results. You need separate parsing logic for each engine, though the overall scraping workflow is similar.

Can I use the same proxies for both Google and Bing?

Yes. Residential proxies from ProxyHat work well for both search engines. While Bing may work with cheaper datacenter proxies, using residential proxies for both simplifies your infrastructure and ensures consistent results.

Why should I track Bing rankings in addition to Google?

Bing holds approximately 9% of US search traffic and powers DuckDuckGo and Yahoo results. Enterprise users disproportionately use Bing due to Microsoft integration. Tracking both gives a more complete visibility picture.

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