Bez KYC — bez dowodu, bez selfie, bez dokumentów. Płatność kryptowalutą: BTC, USDT, USDC, ETH, SOL, LTC
Język: Polski
Pobierz klucz API

Poradnik · Python · przetestowany kod · na październik 2026

Jak uzyskać wyniki wyszukiwania Google w Pythonie (2026)

Pobieranie google.com przez requests przestało być opcją w 2025. Ten poradnik wyjaśnia dlaczego, a potem podaje krótki, sprawdzony składniowo Python, który przez API SERP zwraca te same wyniki jako JSON.

Ostatnia aktualizacja: · 5 min czytania

Szybka odpowiedź

Jak uzyskać wyniki wyszukiwania Google w Pythonie w 2026?

Wywołaj API SERP z Pythona i odczytaj zwrócony JSON; nie pobieraj google.com samodzielnie, bo Google wymaga JavaScript od 17 stycznia 2025, a jego robots.txt zabrania /search. Z SerpCrypto jedno requests.get do https://serpcrypto.com/api/v1/search zwraca wyniki organiczne, People Also Ask i więcej, za jeden kredyt na wyszukiwanie od 0,30 USD/1K wyszukiwań na październik 2026. Bez KYC; płatność kryptowalutą.

Czego potrzebujesz

Python3.9 lub nowszy
Pakietyrequests do podstaw; pandas do tabel; httpx do async
klucz APIZ Twojego panelu SerpCrypto, przechowywany w zmiennej środowiskowej SERPCRYPTO_API_KEY
EndpointGET https://serpcrypto.com/api/v1/search
Koszt1 kredyt = 1 udane zapytanie wyszukiwania, które zwraca jedną stronę wyników na dowolnym obsługiwanym silniku. Nieudane zapytanie nie jest rozliczane
Najmniejszy pakiet10 000 wyszukiwań za 7,50 USD; kredyty nigdy nie wygasają

Dlaczego requests.get na google.com już nie działa?

Bo wyniki nie są już w HTML, który otrzymuje zwykły klient HTTP. 17 stycznia 2025 Google zaczęło wymagać JavaScript dla wyszukiwania; twierdziło, że JavaScript pomaga chronić jego usługi przed botami i że mniej niż 0,1% wyszukiwań pochodziło od użytkowników z wyłączonym JavaScript, jak podał TechCrunch.

robots.txt Google, odczytany 22 października 2026, wymienia też Disallow: /search dla wszystkich User-Agent. API SERP zajmuje się wykonaniem wyszukiwania i parsowaniem strony, a Twój kod Python ma do czynienia tylko z JSON. To podejście stosowane w dalszej części tego poradnika.

Jak wykonać pierwsze zapytanie?

Zainstaluj requests, umieść klucz w zmiennej środowiskowej i wyślij zapytanie z krajem i językiem. Odpowiedź to słownik z jednym kluczem na blok strony wyników; organic_results zawiera linki w kolejności rankingowej.

Trzymaj klucz poza kodem źródłowym. Na macOS i Linux export SERPCRYPTO_API_KEY=... w powłoce; w Windows PowerShell $env:SERPCRYPTO_API_KEY="...".

Pierwsze zapytanie z requests
import os

import requests

API = "https://serpcrypto.com/api/v1/search"
KEY = os.environ["SERPCRYPTO_API_KEY"]

resp = requests.get(
    API,
    headers={"Authorization": "Bearer " + KEY},
    params={"engine": "google", "q": "best hiking boots", "gl": "us", "hl": "en"},
    timeout=60,
)
resp.raise_for_status()
results = resp.json()

for item in results.get("organic_results", []):
    print(item["position"], item["title"])
    print("   ", item["link"])

for q in results.get("people_also_ask", []):
    print("PAA:", q["question"])

Jak zamienić wyniki w pandas DataFrame?

Zbuduj jeden wiersz na wynik organiczny i zachowaj obok niego zapytanie. DataFrame ułatwia sortowanie, filtrowanie po domenie oraz eksport do CSV i Excel. Brakujące pola, takie jak date w większości wyników, stają się pustymi komórkami zamiast błędów.

Kilka zapytań w jeden DataFrame
import os
from urllib.parse import urlparse

import pandas as pd
import requests

API = "https://serpcrypto.com/api/v1/search"
HEADERS = {"Authorization": "Bearer " + os.environ["SERPCRYPTO_API_KEY"]}


def organic_rows(query, gl="us", hl="en"):
    params = {"engine": "google", "q": query, "gl": gl, "hl": hl}
    resp = requests.get(API, headers=HEADERS, params=params, timeout=60)
    resp.raise_for_status()
    for r in resp.json().get("organic_results", []):
        yield {
            "query": query,
            "position": r.get("position"),
            "title": r.get("title"),
            "domain": urlparse(r.get("link", "")).netloc,
            "link": r.get("link"),
            "snippet": r.get("snippet"),
        }


queries = ["crm for small business", "invoice software", "time tracking app"]
df = pd.DataFrame([row for q in queries for row in organic_rows(q)])
print(df.groupby("domain").size().sort_values(ascending=False).head(10))
df.to_csv("serp_results.csv", index=False)

Jak uruchomić wiele wyszukiwań naraz?

Użyj httpx z asyncio i ogranicz liczbę równoczesnych zapytań semaforem. Twoje konto ma limit współbieżności widoczny w panelu; trzymanie się poniżej niego pozwala uniknąć błędów 429. Zacznij od małej liczby, np. 5, i ustaw ją na limit pokazywany w panelu.

Asynchroniczne wyszukiwania z httpx i semaforem
import asyncio
import os

import httpx

API = "https://serpcrypto.com/api/v1/search"
HEADERS = {"Authorization": "Bearer " + os.environ["SERPCRYPTO_API_KEY"]}
LIMIT = asyncio.Semaphore(5)


async def search(client, query):
    async with LIMIT:
        resp = await client.get(API, params={"engine": "google", "q": query, "gl": "us", "hl": "en"})
        resp.raise_for_status()
        data = resp.json()
        top = data.get("organic_results", [])[:3]
        return query, [r["link"] for r in top]


async def main(queries):
    async with httpx.AsyncClient(headers=HEADERS, timeout=60) as client:
        for query, links in await asyncio.gather(*(search(client, q) for q in queries)):
            print(query, links)


if __name__ == "__main__":
    asyncio.run(main(["python web framework", "python orm", "python task queue"]))

Jak uzyskać więcej niż 10 wyników i je zapisać?

Poproś o kolejne strony przez page=2, page=3 i tak dalej, aż do page=10. Każda strona to jedno wyszukiwanie i jeden kredyt, ponieważ Google serwuje około 10 organicznych wyników na stronę, odkąd w wrześniu 2025 przestało respektować num=100.

Zapisz każdą surową odpowiedź jako jedną linię pliku JSONL. Surowy JSON zachowuje wszystkie bloki, więc później możesz odpowiedzieć na nowe pytania bez ponownego płacenia za te same wyszukiwania.

Strony od 1 do 3 zapisane jako JSONL
import json
import os

import requests

API = "https://serpcrypto.com/api/v1/search"
HEADERS = {"Authorization": "Bearer " + os.environ["SERPCRYPTO_API_KEY"]}


def fetch_pages(query, pages=3, path="serp.jsonl"):
    with open(path, "a", encoding="utf-8") as out:
        for page in range(1, pages + 1):
            params = {"engine": "google", "q": query, "gl": "us", "hl": "en", "page": page}
            resp = requests.get(API, headers=HEADERS, params=params, timeout=60)
            resp.raise_for_status()
            data = resp.json()
            out.write(json.dumps(data, ensure_ascii=False) + "\n")
            if not data.get("organic_results"):
                break


fetch_pages("electric cargo bike", pages=3)

Ile kosztuje uruchomienie tego kodu?

Każde wywołanie w tych przykładach to jedno wyszukiwanie. Pierwszy przykład kosztuje jeden kredyt, przykład z DataFrame trzy, a przykład z JSONL do trzech. Nieudane zapytanie nie jest obciążane opłatą.

10 000 wyszukiwań kosztują 7,50 USD, a 100 000 wyszukiwań kosztują 56,25 USD, według stanu na październik 2026; stawka spada do 0,30 USD/1K wyszukiwań przy 5 000 000 wyszukiwań. Kredyty nigdy nie wygasają. Płacisz w BTC, USDT, USDC, ETH, SOL, LTC z doładowania 25 USD, bez wysyłania dokumentu tożsamości. Zobacz cennik.

Wyniki wyszukiwania Google w Pythonie: najczęstsze pytania

Czy mogę użyć BeautifulSoup na stronach wyników Google?

Nie w sposób niezawodny. Google wymaga JavaScriptu od stycznia 2025, więc HTML odbierany przez zwykłego klienta nie zawiera wyników, a robots.txt Google zabrania /search. API SERP zwraca zamiast tego sparsowane pola jako JSON.

Czy istnieje oficjalna biblioteka Python dla SerpCrypto?

Nie. API to zwykły endpoint HTTPS, więc wystarczy requests lub httpx. Przykłady na tej stronie i na stronie dokumentacji Pythona to kod do skopiowania, a nie opublikowany pakiet.

Jak uzyskać wyniki dla innego kraju?

Ustaw gl na kod kraju, a hl na język, na przykład gl=fr i hl=fr dla Francji. Dodaj location dla miasta. Strona lokalizacji zawiera listę popularnych kodów.

Jak obsłużyć błędy i ponowienia?

Wywołaj raise_for_status(), a następnie ponów 429, 502 i 504 po rosnącym opóźnieniu. Nieudane zapytania nie są obciążane opłatą. Strona błędów zawiera pełną funkcję ponawiania.

Czy tym samym kodem mogę uzyskać wyniki Bing?

Tak. Zmień engine na bing; odpowiedź zachowuje ten sam kształt, z organic_results i related_searches.

Źródła (3)
  1. Google zaczyna wymagać JavaScriptu dla wyszukiwarki Google — TechCrunch (2025-01-17)
  2. robots.txt google.com — Google (read 2026-10-22)
  3. Google zmusza trackery pozycji do 500–1 000 zapytań na jedno słowo kluczowe — PPC Land (2026-08-27)

Od 0,30 USD/1K wyszukiwań · bez KYC

Pobierz klucz API