KYC yok — kimlik yok, selfie yok, belge yok. Kripto ile ödeme: BTC, USDT, USDC, ETH, SOL, LTC
Dil: Türkçe
API anahtarı alın

Rehber · Python · test edilmiş kod · Ekim 2026 itibarıyla

Python'da Google Arama Sonuçları Nasıl Alınır (2026)

google.com'u requests ile çekmek 2025'te artık bir seçenek olmaktan çıktı. Bu rehber nedenini açıklar, ardından bir SERP API üzerinden aynı sonuçları JSON olarak alan kısa, söz dizimi kontrol edilmiş Python kodu verir.

Son güncelleme: · 5 dk okuma

Hızlı yanıt

2026'da Python'da Google arama sonuçlarını nasıl alırım?

Python'dan bir SERP API çağırın ve döndürdüğü JSON'u okuyun; google.com'u kendiniz çekmeyin, çünkü Google 17 Ocak 2025'ten beri JavaScript gerektiriyor ve robots.txt dosyası /search izin vermiyor. SerpCrypto ile bir requests.get ile https://serpcrypto.com/api/v1/search arası çağrı, organik sonuçları, People Also Ask ve daha fazlasını, Ekim 2026 itibarıyla $0,30/1K arama üzerinden arama başına bir krediyle döndürür. KYC yok; kripto ile ödeme.

İhtiyacınız olanlar

Python3.9 veya daha yeni
PaketlerTemel işlemler için requests; tablolar için pandas; async için httpx
API anahtarıSerpCrypto kontrol panelinizden, SERPCRYPTO_API_KEY ortam değişkeninde saklanır
EndpointGET https://serpcrypto.com/api/v1/search
Maliyet1 kredi = desteklenen herhangi bir motorda bir sayfa sonuç döndüren 1 başarılı arama isteği. Başarısız olan istek ücretlendirilmez
En küçük paket$7,50 için 10.000 arama; krediler süresi dolmaz

google.com üzerinde requests.get neden artık çalışmıyor?

Çünkü sonuçlar artık düz bir HTTP istemcisinin aldığı HTML içinde değil. 17 Ocak 2025'te Google, Search için JavaScript gerektirmeye başladı; JavaScript'in hizmetlerini botlardan korumaya yardımcı olduğunu ve aramaların %0,1'den azının JavaScript kapalı kullanıcılardan geldiğini, TechCrunch'ın bildirdiğine göre, söyledi.

22 Ekim 2026'da okunan Google'ın robots.txt dosyası da tüm user agent'lar için Disallow: /search listeliyor. Aramayı çalıştırmayı ve sayfayı ayrıştırmayı bir SERP API üstlenir, Python kodunuz yalnızca JSON ile ilgilenir. Bu rehberin geri kalanında kullanılan yaklaşım budur.

İlk isteği nasıl yaparım?

requests'i kurun, anahtarınızı bir ortam değişkenine koyun ve sorguyu bir ülke ve bir dille gönderin. Yanıt, sonuç sayfasının her bloğu için bir anahtar içeren bir sözlüktür; organic_results sıralanmış bağlantıları tutar.

Anahtarı kaynak kodunuzun dışında tutun. macOS ve Linux'ta kabukta export SERPCRYPTO_API_KEY=...; Windows PowerShell'de $env:SERPCRYPTO_API_KEY="...".

requests ile ilk istek
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"])

Sonuçları bir pandas DataFrame'e nasıl dönüştürürüm?

Her organik sonuç için bir satır oluşturun ve sorguyu yanında tutun. Bir DataFrame sıralamayı, alan adına göre filtrelemeyi veya CSV ve Excel'e dışa aktarmayı kolaylaştırır. Eksik alanlar, örneğin çoğu sonuçta date, hata yerine boş hücrelere dönüşür.

Birden çok sorgu tek bir DataFrame'e
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)

Aynı anda çok sayıda arama nasıl yapabilirim?

httpx ile asyncio kullanın ve semaphore ile eşzamanlı istek sayısını sınırlayın. Hesabınızın bir eşzamanlılık sınırı vardır ve bu sınır dashboard'da gösterilir; altında kalmak 429 hatalarını önler. 5 gibi küçük bir sayıyla başlayın ve dashboard'da gösterilen sınıra ayarlayın.

httpx ve semaphore ile asenkron aramalar
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"]))

10'dan fazla sonucu nasıl alırım ve nasıl kaydederim?

Sonraki sayfaları page=2, page=3 ve benzeri şekilde page=10'ye kadar isteyin. Her sayfa bir arama ve bir kredidir, çünkü Google num=100 parametresini Eylül 2025'te dikkate almayı bıraktığından beri sayfa başına yaklaşık 10 organik sonuç sunuyor.

Her ham yanıtı bir JSONL dosyasında tek bir satır olarak kaydedin. Ham JSON tüm blokları korur, böylece aynı aramalar için tekrar ödeme yapmadan daha sonra yeni soruları yanıtlayabilirsiniz.

JSONL olarak kaydedilmiş 1-3. sayfalar
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)

Bu kodu çalıştırmanın maliyeti nedir?

Bu örneklerdeki her çağrı bir aramadır. İlk örnek bir krediye, DataFrame örneği üç krediye, JSONL örneği ise en fazla üç krediye mal olur. Başarısız bir istek için ücret alınmaz.

Ekim 2026 itibarıyla 10.000 arama maliyeti $7,50 ve 100.000 arama maliyeti $56,25; oran 5.000.000 arama seviyesinde $0,30/1K arama'e düşer. Krediler asla sona ermez. Kimlik yükleme olmadan $25 ile yapılan bir bakiye yüklemesinden BTC, USDT, USDC, ETH, SOL, LTC ile ödeme yaparsınız. Fiyatlandırmaya bakın.

Python'da Google sonuçları: sık sorulan sorular

Google sonuç sayfalarında BeautifulSoup kullanabilir miyim?

Güvenilir şekilde olmaz. Google Ocak 2025'ten beri JavaScript gerektiriyor, bu yüzden düz bir istemcinin aldığı HTML sonuçları içermiyor ve Google'ın robots.txt dosyası /search iznini vermiyor. Bir SERP API bunun yerine ayrıştırılmış alanları JSON olarak döndürür.

SerpCrypto için resmi bir Python kütüphanesi var mı?

Hayır. API düz bir HTTPS endpoint'idir, bu yüzden ihtiyacınız olan tek şey requests veya httpx. Bu sayfadaki ve Python dokümanları sayfasındaki örnekler kopyala-yapıştır koddur, yayımlanmış bir paket değildir.

Başka bir ülke için sonuçları nasıl alabilirim?

gl parametresini ülke koduna ve hl parametresini dile ayarlayın; örneğin Fransa için gl=fr ve hl=fr. Bir şehir için location ekleyin. Konumlar sayfası yaygın kodları listeler.

Hataları ve yeniden denemeleri nasıl ele alırım?

raise_for_status() çağrısını yapın, ardından 429, 502 ve 504 yanıtlarını artan bir gecikmeyle yeniden deneyin. Başarısız istekler için ücret alınmaz. Hatalar sayfasında tam bir yeniden deneme fonksiyonu vardır.

Aynı kodla Bing sonuçlarını alabilir miyim?

Evet. engine parametresini bing olarak değiştirin; yanıt organic_results ve related_searches ile aynı yapıyı korur.

Kaynaklar (3)
  1. Google, Google Arama için JavaScript zorunluluğu getirmeye başlıyor — TechCrunch (2025-01-17)
  2. google.com robots.txt — Google (read 2026-10-22)
  3. Google, sıralama takipçilerini sorgu başına 500 ila 1.000 isteğe zorluyor — PPC Land (2026-08-27)

$0,30/1K arama itibarıyla · KYC olmadan

API anahtarı alın