لماذا نتائج البحث عن (سراب جوجل)؟
Google processes over 8.5 billion searches per day, making its search motor results pages (SERPs) the most valuable source of competitive intelligence on the web. إن نتائج البحث عن غوغل تعطيك إمكانية الوصول إلى التصنيفات العضوية، والقنابل المميزة، والناس أيضا يسألون الصناديق، والحزم المحلية، والتنسيب المدفوع الأجر - كل ذلك في الوقت الحقيقي.
سواء كنت تبني SERP monitoring pipeline أو القيام ببحث عن كلمة رئيسية واحدة، وصول البرنامج إلى نتائج جوجل يجعلك تسيّر سير العمل الآلي الذي يستغرق ساعات لإكماله يدوياً. وتشمل حالات الاستخدام المشترك ما يلي:
- تتبع ترتيب كلماتك الرئيسية عبر الأسواق
- رصد رؤية المنافسين للاستفسارات المستهدفة
- تحليل توزيع سمات نظام تخطيط الموارد في المؤسسة (الدميات والصور والفيديو)
- إعداد مجموعات بيانات عن البحوث واستراتيجية المحتوى في المنظمة
Understanding Google SERP Structure
قبل كتابة الخردة، تحتاج إلى فهم التشريح من صفحة نتائج جوجل. A modern SERP can contain over a dozen distinct result types:
| نوع النتيجة | CSS/ Data Marker | الوصف |
|---|---|---|
| النتائج العضوية | div#search .g | نتائج الرابط الأزرق القياسية مع اللقب، URL، والقنبلة |
| قناص مسموع | div.xpdopen | صندوق الجواب المعروض فوق النتائج العضوية |
| الناس يسألون | div.related-question-pair | مسائل واسعة النطاق من طراز FAQ |
| الحزمة المحلية | div.VkpGBb | خريطة تتضمن 3 قوائم تجارية محلية |
| فريق المعارف | div.kp-wholepage | جانب معلومات الكيان |
| النتائج | div.uEierd | إعلانات بحث مدفوعة الأجر في القمة والقاع |
(جوجل) يُغيّر أسماء الطبقات كثيراً بناء حزمتك مع إختيارات الخريف والاختبار بشكل منتظم للحفاظ على الاستخراج الموثوق به.
تهيئين بيئتك
لتخريد جوجل بشكل موثوق، تحتاج إلى ثلاثة عناصر: عميلة في شركة HTTP، وصلة محترفة، Below are complete examples in Python, Node.js, and Go using ProxyHat proxies.
Python Example
ضعي المعالين أولاً The ProxyHat Python SDK يُبسّطُ التشكيلةَ البديلةَ.
pip install requests beautifulsoup4import requests
from bs4 import BeautifulSoup
proxy_url = "http://USERNAME:PASSWORD@gate.proxyhat.com:8080"
proxies = {
"http": proxy_url,
"https": proxy_url,
}
headers = {
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0.0.0 Safari/537.36",
"Accept-Language": "en-US,en;q=0.9",
}
def scrape_google(query, num_results=10):
params = {
"q": query,
"num": num_results,
"hl": "en",
"gl": "us",
}
response = requests.get(
"https://www.google.com/search",
params=params,
headers=headers,
proxies=proxies,
timeout=15,
)
response.raise_for_status()
soup = BeautifulSoup(response.text, "html.parser")
results = []
for g in soup.select("div#search .g"):
title_el = g.select_one("h3")
link_el = g.select_one("a")
snippet_el = g.select_one(".VwiC3b")
if title_el and link_el:
results.append({
"title": title_el.get_text(),
"url": link_el["href"],
"snippet": snippet_el.get_text() if snippet_el else "",
})
return results
results = scrape_google("best residential proxies 2026")
for i, r in enumerate(results, 1):
print(f"{i}. {r['title']}\n {r['url']}\n")Node.js Example
استخدام ProxyHat Node SDK و Cheerio for parsing:
npm install axios cheerio https-proxy-agentconst 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 scrapeGoogle(query) {
const { data } = await axios.get('https://www.google.com/search', {
params: { q: query, num: 10, hl: 'en', gl: 'us' },
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);
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;
}
scrapeGoogle('best residential proxies 2026').then(console.log);Go Example
استخدام ProxyHat Go SDK و الثرثرة:
package main
import (
"fmt"
"log"
"net/http"
"net/url"
"github.com/PuerkitoBio/goquery"
)
func main() {
proxyURL, _ := url.Parse("http://USERNAME:PASSWORD@gate.proxyhat.com:8080")
client := &http.Client{
Transport: &http.Transport{Proxy: http.ProxyURL(proxyURL)},
}
req, _ := http.NewRequest("GET", "https://www.google.com/search?q=best+residential+proxies&num=10&hl=en&gl=us", nil)
req.Header.Set("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36")
req.Header.Set("Accept-Language", "en-US,en;q=0.9")
resp, err := client.Do(req)
if err != nil {
log.Fatal(err)
}
defer resp.Body.Close()
doc, _ := goquery.NewDocumentFromReader(resp.Body)
doc.Find("div#search .g").Each(func(i int, s *goquery.Selection) {
title := s.Find("h3").Text()
link, _ := s.Find("a").Attr("href")
fmt.Printf("%d. %s\n %s\n\n", i+1, title, link)
})
}Parsing Different SERP Features
الخردة الكاملة يجب أن تتعامل مع أكثر من النتائج العضوية وها هي أنماط الفرز لأهم سمات نظام تخطيط الموارد في المؤسسة.
قنابل مسموعة
# Python: Extract featured snippet
snippet_box = soup.select_one("div.xpdopen")
if snippet_box:
featured = {
"type": "featured_snippet",
"text": snippet_box.get_text(strip=True),
"source_url": snippet_box.select_one("a")["href"] if snippet_box.select_one("a") else None,
}الناس يسألون
# Python: Extract PAA questions
paa_questions = []
for q in soup.select("div.related-question-pair"):
question_text = q.select_one("span")
if question_text:
paa_questions.append(question_text.get_text(strip=True))النتائج المحلية
# Python: Extract local pack
local_results = []
for item in soup.select("div.VkpGBb"):
name = item.select_one(".dbg0pd")
rating = item.select_one(".yi40Hd")
local_results.append({
"name": name.get_text() if name else "",
"rating": rating.get_text() if rating else "",
})Handling Google Blocks and CAPTCHAs
Google actively defends against automated scraping. بدون بنية تحتية محترفة مناسبة ستواجهون بنايات في غضون عشرات الطلبات وتشمل الآليات الدفاعية الرئيسية ما يلي:
- المعدل الذي يحد من: عدد كبير جدا من الطلبات المقدمة من أحد شركاء التنفيذ
- التحديات التي تواجه المركز: Google serves reCAPHA when it suspects functioning
- IP reputation: IP ranges receive more scrutiny than residential IPs
- بصمات الأصابع المفقودون أو المتضاربون يرفعون الأعلام
وللاطلاع على استراتيجيات تفصيلية لمكافحة الكشف، انظر دليلنا بشأن الخردة من دون أن يتم منعها و كَمْ نُظُم مضادة للدباباتِ تَكتشفُ المحترفين.
الاستراتيجية الموصى بها
المحترفون المقيمون أساسيون لخردة غوغل المستمرة. وكيلات النيابة إتاحة الوصول إلى الملايين من شركاء التنفيذ عبر الحدود 190 موقعامما يُمكّنك من تناوب شركاء التنفيذ آلياً و توجيه طلباتك النصائح الأساسية:
- تناوب شركاء التنفيذ على كل طلب - لا يعيد أبدا استخدام نفس IP من أجل الاستفسارات المتتالية عن غوغل
- إضافة تأخيرات عشوائية بين 2 و5 ثوان بين الطلبات
- تطابق مستعملك مع نسخة مصففة حقيقية
- المجموعة
hlوglالبارامترات المتسقة مع موقعك
الإحالة إلى وثائق الإثبات من أجل تحديد التوثيق وإدارة الدورة.
بناء Scraper للإنتاج
والانتقال من السيناريو إلى خط أنابيب الإنتاج يتطلب منطق إعادة النظر، والناتج المنظم، والرصد. هنا نسخة صلبة من الخردة البيتونية:
import requests
import time
import random
import json
from bs4 import BeautifulSoup
from datetime import datetime
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",
"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0.0.0 Safari/537.36",
]
def scrape_serp(query, location="us", retries=3):
for attempt in range(retries):
try:
headers = {
"User-Agent": random.choice(USER_AGENTS),
"Accept-Language": "en-US,en;q=0.9",
"Accept": "text/html,application/xhtml+xml",
}
response = requests.get(
"https://www.google.com/search",
params={"q": query, "num": 10, "hl": "en", "gl": location},
proxies={"http": PROXY_URL, "https": PROXY_URL},
headers=headers,
timeout=15,
)
if response.status_code == 429:
wait = (attempt + 1) * 10
print(f"Rate limited. Waiting {wait}s...")
time.sleep(wait)
continue
response.raise_for_status()
soup = BeautifulSoup(response.text, "html.parser")
# Check for CAPTCHA
if "captcha" in response.text.lower() or soup.select_one("#captcha-form"):
print(f"CAPTCHA detected. Retrying with new IP...")
time.sleep(random.uniform(5, 10))
continue
return parse_serp(soup, query)
except requests.RequestException as e:
print(f"Attempt {attempt + 1} failed: {e}")
time.sleep(random.uniform(2, 5))
return None
def parse_serp(soup, query):
results = {
"query": query,
"timestamp": datetime.utcnow().isoformat(),
"organic": [],
"featured_snippet": None,
"paa": [],
}
# Organic results
for i, g in enumerate(soup.select("div#search .g")):
title_el = g.select_one("h3")
link_el = g.select_one("a")
snippet_el = g.select_one(".VwiC3b")
if title_el and link_el:
results["organic"].append({
"position": i + 1,
"title": title_el.get_text(),
"url": link_el["href"],
"snippet": snippet_el.get_text() if snippet_el else "",
})
# Featured snippet
snippet_box = soup.select_one("div.xpdopen")
if snippet_box:
results["featured_snippet"] = snippet_box.get_text(strip=True)[:500]
# People Also Ask
for q in soup.select("div.related-question-pair span"):
results["paa"].append(q.get_text(strip=True))
return results
# Usage: scrape a list of keywords
keywords = ["best residential proxies", "proxy for web scraping", "serp tracking tools"]
all_results = []
for kw in keywords:
result = scrape_serp(kw)
if result:
all_results.append(result)
time.sleep(random.uniform(3, 7)) # Delay between keywords
# Save to JSON
with open("serp_results.json", "w") as f:
json.dump(all_results, f, indent=2)Scaling your SERP Scraper
عند رصد المئات أو الآلاف من الكلمات الرئيسية، فإن الخردة الوحيدة الجاهزة بطيئة للغاية. النظر في نُهج التقليص هذه:
- الطلبات المتكررة: Use asyncio (Python), worker threads (Node.js), or goroutines (Go) to send multiple requests in parallel
- بنية قائمة على أساس كوي: إدفع كلمات رئيسية في طابور (Redis, RabbitMQ) ومعالجتها مع عمال متعددين
- إدارة المجمعات: (بروكسي هات) يتعامل مع التناوب تلقائياً، لكنّ جلسة التخييم تعتمد على احتياجاتك
- كاميرا النتائج: Cache SERP data to avoid redundant requests for the same query within a time window
للحصول على توجيهات شاملة بشأن بناء نظم الخردة القابلة للتكرار، قراءتنا دليل كامل لأجهزة التخريد الشبكي.
الاعتبارات القانونية والأخلاقية
شروط خدمة (جوجل) تحد من الوصول الآلي When scraping Google SERPs, follow these guidelines:
- إحترام الحدود وتجنب خوادم جوجل الغامرة
- Use the data for legitimate business purposes (SEO monitoring, market research)
- لا تعيد توزيع بيانات نظام تخطيط الموارد في المؤسسة بشكل تجاري دون فهم القوانين المنطبقة
- النظر في استخدام نظام (جوجل) الرسمي حيث يلبي احتياجاتك
تحقق دائما من قوانينك المحلية فيما يتعلق بتخريد الشبكة وجمع البيانات قبل نشر كشطة نظام التخطيط على نطاق واسع






