معظم شروحات "gemini web scraping" تبدو كأنها مكتوبة لشخص واحد فقط: مطوّر Python عنده أصلًا virtualenv، وPydantic schema، ورأي حاد جدًا في مكتبات async. إذا كنت هذا الشخص، ممتاز — بنوصل للكود بعد شوي. لكن إذا كنت تشتغل في المبيعات أو التسويق أو عمليات التجارة الإلكترونية وتبغى بس بيانات منظمة من كم صفحة ويب بدون ما تتعلم وش يسوي markdownify، فأنت مو لحالك.
Gemini هو عائلة الذكاء الاصطناعي متعددة الوسائط من Google، وصار بسرعة واحد من أبرز المحركات لاستخراج بيانات الويب. بيّن استطلاع Stack Overflow للمطورين لعام 2025 أن 84% من المطورين يستخدمون أدوات الذكاء الاصطناعي أو ناوين يستخدمونها — وScraping المعتمد على LLMs جزء كبير من هذا الاتجاه. لكن فيه فجوة فعلية بين "عرض تجريبي رهيب على عنوان URL واحد" وبين خط إنتاج يتعامل مع التصفح بين الصفحات، والصفحات الفرعية، وحواجز مكافحة الروبوتات، وHTML غير المرتب على نطاق واسع. هذا الدليل يغطي المسارين: Python (بالكود) وبدون كود، ويمر على اختيار النموذج مع حسابات فعلية للتكلفة، ويشرح التعامل مع scraping متعدد الصفحات (الخطوة اللي تتجاهلها أغلب الشروحات)، ويكون واضح وصريح عن الأماكن اللي يفشل فيها Gemini. بالنهاية، بتعرف أي مسار يناسب سير عملك — وكيف تتفادى الأخطاء اللي تشوّش على المطورين ومستخدمي الأعمال معًا.
ما هو Gemini Web Scraping؟
Gemini web scraping يعني ترسل محتوى صفحة ويب — HTML أو Markdown أو حتى لقطة شاشة — إلى أحد نماذج Gemini من Google، وبعدها النموذج يفسر الصفحة ويرجع بيانات منظمة. لا CSS selectors. لا XPath. ولا قواعد هشة تنهار أول ما الموقع يغير شكله شوي.
العملية الأساسية تكون كذا:
- جلب الصفحة باستخدام
requestsأو متصفح headless أو إضافة Chrome - تنظيف المحتوى وتحويله، وغالبًا من HTML إلى Markdown لتقليل تكلفة الرموز
- إرساله إلى Gemini مع schema يوضح الحقول المطلوبة
- استلام JSON منظم جاهز لجدول بيانات أو CRM أو قاعدة بيانات
قارن هذا مع scraping التقليدي باستخدام BeautifulSoup أو Selenium، حيث تكتب selectors ثابتة مثل div.product-title > span.price وتدعو أن الموقع ما يعيد تصميمه الأسبوع الجاي. Gemini يقرأ الصفحة مثل الإنسان — يفهم السياق، ويتأقلم مع تغييرات التصميم، ويتعامل مع التنسيق العشوائي بدون قواعد مخصصة.
وفي نقطة مهمة ثانية: Gemini يدعم الوسائط المتعددة بشكل أصلي. فهو يعالج النصوص والصور والفيديو والصوت وPDF والبرمجيات في طلب واحد. هذا يفتح طرق جديدة للاستخراج — مثل إرسال لقطة شاشة بدل HTML — وهي طرق أغلب نماذج LLM الثانية ما تقدر تضاهيها. برجع لها بعد شوي.
لماذا يهم Gemini Web Scraping فرق الأعمال؟
إذا كنت تتساءل ليه مدير تسويق أو محلل تجارة إلكترونية يهتم بـ LLMs وWeb Scraping، فالجواب المختصر: لأنه يوفر وقت هائل، وما ينهار كل مرة الموقع يحدث نفسه.
من المتوقع أن ينمو سوق برامج web scraping من حوالي مليار دولار في 2025 إلى أكثر من ملياري دولار بحلول 2030 — ويُعد الاستخراج المدعوم بالذكاء الاصطناعي الأسرع نموًا. هذا مو تهويل؛ هذا يعكس تحول حقيقي في طريقة جمع الفرق للبيانات.
هنا وين يناسب Gemini scraping في سير العمل اليومي للأعمال:
| حالة الاستخدام | وش يتم استخراجه | مين يستفيد |
|---|---|---|
| توليد العملاء المحتملين | معلومات التواصل من الأدلة، وLinkedIn (العامة)، ومواقع الشركات | المبيعات، BDRs |
| مراقبة أسعار المنافسين | أسعار المنتجات، حالة المخزون، العروض | التجارة الإلكترونية، فرق التسعير |
| استخراج كتالوج المنتجات | الأسماء، المواصفات، الصور، المراجعات | merchandising، عمليات السوق |
| عقارات | تفاصيل العقار، الأسعار، معلومات الوسيط | الوكلاء، المستثمرون |
| تجميع المحتوى | الأخبار، المقالات، الإشارات على الشبكات الاجتماعية | التسويق، العلاقات العامة |
| أبحاث سوق العمل | المسميات الوظيفية، الرواتب، المواقع | الموارد البشرية، التوظيف |
الفائدة العملية هنا مزدوجة. أولًا، تتجنب دورة كتابة وتحليل وتصحيح سكربتات الاستخراج — لأن النموذج يقرأ الصفحة من جديد كل مرة. ثانيًا، ما تحتاج تنادي مطوّر كل مرة يحرك الموقع <div>. وكمان الطبقة المجانية من Gemini تخلي التجربة شبه مجانية في المهام الصغيرة: حوالي 1000 طلب يوميًا على Flash-Lite و100 يوميًا على Pro، بدون الحاجة إلى بطاقة ائتمان.
أي نموذج من Gemini يجب أن تختار؟ (Flash Lite أم Flash أم Pro)
مو كل نماذج Gemini متساوية لما يجي الكلام عن الـ scraping. هذا مقارنة عملية كنت أتمنى أشوفها في كل شرح، لأن اختيار الطبقة الغلط يعني يا إما تهدر فلوسك أو تطلع ببيانات ضعيفة.
النماذج الثلاثة الحالية من Gemini 2.5 تشترك في نافذة سياق 1,048,576 رمز، وكلها متعددة الوسائط. الفرق بينها في التكلفة والسرعة ومدى كفاءتها مع الاستخراج المعقد.
| النموذج | تكلفة الإدخال (لكل 1M رمز) | تكلفة الإخراج (لكل 1M رمز) | الأفضل لـ | الدقة مع المخططات المعقدة | السرعة |
|---|---|---|---|---|---|
| Gemini 2.5 Flash Lite | حوالي $0.025 | حوالي $0.10 | البيانات البسيطة المسطحة، الحجم الكبير | ⚠️ يتعثر مع الحقول المتداخلة/الاختيارية | الأسرع |
| Gemini 2.5 Flash | حوالي $0.075 | حوالي $0.625 | معظم مهام scraping | ✅ جيد للاستخراج المنظم | سريع |
| Gemini 2.5 Pro | حوالي $0.3125 | حوالي $2.50 | المخططات المعقدة المتداخلة، الحالات الطرفية | ✅ أعلى دقة | الأبطأ |
(الأسعار من Gemini Developer API. واجهة Batch API تعطي خصم 50% على هذي الأسعار.)
Gemini 2.5 Flash Lite: سريع ورخيص، لكن انتبه للفجوات
Flash Lite هو خيار الميزانية. وهو ممتاز للبيانات البسيطة والمسطحة — أسماء المنتجات، الأسعار، القوائم ذات المستوى الواحد — وبحجم كبير. لكن عنده مشاكل موثقة مع الحقول الاختيارية والطوابع الزمنية والبيانات المتداخلة. أحد المطورين في منتدى Google ذكر أن Flash Lite "يختل تمامًا" لما يكون المخطط فيه خصائص غير إلزامية، ويبدأ يكرر النص إلى أن يصل حد الرموز. إذا كان المخطط عندك فيه أكثر من مستويين من التداخل، أو حقول ممكن ما تكون موجودة في بعض الصفحات، Flash Lite بيسحب من الرموز ومن صبرك بنفس الوقت.
Gemini 2.5 Flash: النقطة الذهبية لمعظم مهام scraping
Flash هو اللي أنصح تبدأ فيه في أي مهمة scraping حقيقية تقريبًا. يتعامل بشكل جيد مع الاستخراج المنظم، ويدير منطق الترقيم بين الصفحات، وتكلفته على الإدخال أعلى بنحو 3 مرات من Flash Lite — لكن قفزة الدقة تستاهل. في معايير الاستدلال على مستوى GPQA، Flash قريب جدًا من Pro، وهذا يعني أنه ممتاز في الاستنتاج والتطبيع والتبسيط اللي تحتاجه عملية scraping فعلًا.
Gemini 2.5 Pro: أعلى دقة للبيانات المعقدة
Pro هو خيار الدقة العالية. استخدمه لما تستخرج مخططات متداخلة بعمق (مثل مواصفات منتجات فيها عدة مجموعات متغيرات، وكل مجموعة فيها أحجام وألوان وأسعار)، أو لما القيم الملفقة غير مقبولة أبدًا (البيانات القانونية أو المالية أو الطبية). تكلفته على الإدخال أعلى بنحو 12 مرة من Flash Lite، فخله للمهام اللي تكون فيها الدقة أهم من السعر.
مثال تكلفة عملي: 10,000 صفحة منتج
بافتراض أنك تحوّل HTML إلى Markdown مسبقًا — وضروري تسوي كذا، بعد شوي أوضح — صفحة المنتج النموذجية تنخفض من حوالي 20,000 رمز في HTML الخام إلى قرابة 4,000 رمز في Markdown. وJSON الناتج يستهلك حوالي 500 رمز لكل صفحة.
| النموذج | تكلفة الإدخال (40M رمز) | تكلفة الإخراج (5M رمز) | الإجمالي لـ 10K صفحات |
|---|---|---|---|
| Flash Lite | $1.00 | $0.50 | حوالي $1.50 |
| Flash | $3.00 | $3.13 | حوالي $6.13 |
| Pro | $12.50 | $12.50 | حوالي $25.00 |
بدون المعالجة المسبقة إلى Markdown (HTML خام بحوالي 200M رمز إدخال)، هالأرقام ترتفع 4 إلى 5 مرات. المعالجة المسبقة هي أعلى خطوة تأثير في كامل خط العمل.
الكود أم بدون كود: مساران لـ Gemini Web Scraping
هنا يتفرع الطريق. إذا كنت مطوّر تبني خط مخصص، فمسار Python + Gemini API يعطيك أقصى تحكم. وإذا كنت مستخدم أعمال وتبغى البيانات الآن بدون ما تلمس الطرفية، فـ AI scraper بدون كود بيوصلك أسرع.
| المعيار | Gemini API (Python) | Thunderbit (بدون كود) |
|---|---|---|
| وقت الإعداد | 15–30 دقيقة (البيئة، المفاتيح، المكتبات) | أقل من دقيقة (تثبيت إضافة Chrome) |
| الحاجة إلى برمجة | نعم (Python, Pydantic) | لا |
| التعامل مع الترقيم بين الصفحات | برمجة يدوية | مدمج (نقر أو تمرير لا نهائي) |
| إثراء الصفحات الفرعية | كود مخصص لكل موقع | "Scrape Subpages" بنقرة واحدة |
| إدارة تكلفة الرموز | يدويًا (تنظيف HTML، اختيار النموذج) | يتولاها محرك الذكاء الاصطناعي |
| خيارات التصدير | JSON/CSV عبر سكربت | Excel, Google Sheets, Airtable, Notion |
| الأفضل لـ | المطورون اللي يبنون خطوط مخصصة | مستخدمو الأعمال اللي يحتاجون البيانات الآن |
Thunderbit هو خيار بدون كود بنيناه في Thunderbit — إضافة Chrome تستخدم الذكاء الاصطناعي (بما في ذلك Gemini وChatGPT وClaude وغيرها في الخلفية) لاقتراح الحقول، واستخراج البيانات بنقرتين، وتصديرها للأداة اللي تختارها. بشرح المسارين تحت.
وللي يعتمد على الجداول بشكل أساسي، Quadratic خيار ثاني يستاهل تعرفه — لأنه جدول بيانات ذكي يقدر يشغل web scraping المدعوم بـ Gemini داخل الجدول نفسه. لكن في سير العمل اللي يبدأ من صفحة ويب معروفة (قوائم المنتجات، الأدلة، قواعد العملاء المحتملين)، Thunderbit يطابق النموذج الذهني للمستخدم بشكل أقرب.
خطوة بخطوة: Gemini Web Scraping باستخدام Python
هذا القسم للمطورين. إذا كنت تبي المسار بدون كود، تجاوز للقسم اللي بعده.
قبل أن تبدأ:
- مستوى الصعوبة: متوسط (يتطلب معرفة بـ Python)
- الوقت المطلوب: حوالي 20–30 دقيقة لأول عملية استخراج
- ما تحتاجه: Python 3.10+، حساب Google AI Studio (مجاني)، رابط URL مستهدف
الخطوة 1: إعداد بيئة Python ومفتاح Gemini API
أنشئ مجلد مشروع وبيئة افتراضية، ثم ثبّت المكتبات المطلوبة:
mkdir gemini-scraper && cd gemini-scraper
python -m venv venv && source venv/bin/activate
pip install -U google-genai requests beautifulsoup4 markdownify pydantic
مهم: الـ SDK الصحيح الوحيد في 2026 هو google-genai. الحزمة الأقدم google-generativeai وصلت لنهاية عمرها في 2025-11-30 وصارت مهجورة. إذا شفت import google.generativeai as genai في أي شرح، اعرف إن الكود قديم.
بعدها، خذ مفتاح API من Google AI Studio. اضغط "Get API Key"، أنشئ مفتاح جديد، ثم خزنه كمتغير بيئة:
export GEMINI_API_KEY="your-key-here"
الحين صار عندك بيئة Python شغالة بشكل صحيح، مع كل التبعيات ومفتاح API جاهز.
الخطوة 2: جلب HTML للصفحة المستهدفة
استخدم requests لجلب الصفحة. في هذا المثال، بنستخرج صفحة منتج:
import requests
url = "https://example.com/product/widget-pro"
response = requests.get(url, headers={"User-Agent": "Mozilla/5.0"}, timeout=30)
html = response.text
إذا الموقع يعتمد على JavaScript كثيف أو عنده حماية قوية ضد الروبوتات، ممكن requests.get() يرجع صفحة فاضية أو خطأ 403. بنتكلم عن الحلول في قسم القيود لاحقًا — لكن في كثير من المواقع العامة، هذا يشتغل بشكل جيد.
الخطوة 3: تنظيف HTML وتحويله إلى Markdown
هذه هي الخطوة اللي أغلب الشروحات تذكرها لكنها ما تقيسها. HTML الخام لصفحة منتج نموذجية يقارب 20,000 رمز. بعد تنظيف BeautifulSoup والتحويل إلى Markdown، يصير حوالي 765–4,000 رمز — يعني انخفاض 5–10 مرات يوفر فلوس حقيقية ويقلل الهلوسة.
from bs4 import BeautifulSoup
from markdownify import markdownify
soup = BeautifulSoup(html, "html.parser")
main = soup.select_one("main") or soup # خذ منطقة المحتوى فقط
markdown_content = markdownify(str(main))
استدعاء select_one("main") يشيل الترويسات والتذييلات وقوائم التنقل والسكربتات — كل هالضجيج يهدر الرموز ويشتت النموذج. إذا الموقع ما يستخدم وسم <main>, جرب .product-detail أو #content أو أي عنصر يغلف البيانات الفعلية.
بعد هالخطوة، لازم يكون عندك نص Markdown نظيف فيه فقط المحتوى المفيد في الصفحة.
الخطوة 4: تعريف مخطط البيانات وإرساله إلى Gemini
استخدم Pydantic لتعريف اللي تبغى تسترجعه. الـ SDK google-genai يقبل BaseModel من Pydantic مباشرة كـ response_schema:
from google import genai
from google.genai import types
from pydantic import BaseModel
class Product(BaseModel):
name: str
price: str
sku: str | None = None
description: str
sizes: list[str] = []
colors: list[str] = []
client = genai.Client() # يقرأ GEMINI_API_KEY من البيئة
response = client.models.generate_content(
model="gemini-2.5-flash",
contents=f"Extract product details from this page:\n\n{markdown_content}",
config=types.GenerateContentConfig(
response_mime_type="application/json",
response_schema=Product,
),
)
product = response.parsed
print(product)
بعض الملاحظات من سجل الأخطاء الموثق:
- لا تستخدم
Field(default=...)في المخططات اللي ترسلها إلى Gemini — الـ API بيرميValueError. استخدمsku: str | None = Noneعلى مستوى النوع بدلًا من ذلك. - خلّ التداخل سطحيًا (3 مستويات كحد أقصى). المخططات شديدة التداخل تخلي Flash وFlash Lite ينتجون إخراج متكرر أو أقواس غير مغلقة.
- خل الحقول إلزامية عند استخدام Flash Lite، واستعمل قيم فارغة بدل الحذف — لأن تعامل Flash Lite مع الحقول الاختيارية غير موثوق.
الحين المفترض عندك كائن Product محلل يحتوي على بيانات منظمة من الصفحة.
الخطوة 5: تصدير البيانات وحفظها
احفظ النتيجة كـ JSON أو CSV:
import json
with open("products.json", "w") as f:
json.dump(product.model_dump(), f, indent=2)
ولو تبي تنقلها إلى Google Sheets، تقدر تستخدم مكتبة gspread. وللقواعد البيانات، حوّلها إلى ORM اللي تفضله. المخرجات المنظمة من Gemini نظيفة بما يكفي إنها تروح مباشرة لمعظم الأدوات اللاحقة.
خطوة بخطوة: Gemini Web Scraping بدون كود (باستخدام Thunderbit)
هذا هو المسار لمستخدمي الأعمال — أو المطورين اللي ما يبيّن يكتبون سكربتات scraping قصيرة العمر.
قبل أن تبدأ:
- مستوى الصعوبة: مبتدئ
- الوقت المطلوب: حوالي 5 دقائق لأول عملية استخراج
- ما تحتاجه: متصفح Chrome، إضافة Thunderbit (الطبقة المجانية كافية)
الخطوة 1: تثبيت إضافة Thunderbit على Chrome
روح إلى Chrome Web Store واضغط "Add to Chrome." سجّل باستخدام بريدك الإلكتروني — العملية كلها ما تأخذ أكثر من دقيقة. قارن هذا بإعداد Python اللي فوق واللي يأخذ 15–30 دقيقة.
الخطوة 2: افتح الصفحة المستهدفة واضغط "AI Suggest Fields"
انتقل إلى الموقع اللي تبغى تستخرج منه — قائمة منتجات، دليل عقارات، قاعدة بيانات عملاء محتملين، أيًا كان. اضغط على أيقونة Thunderbit في شريط المتصفح، ثم اختر "AI Suggest Fields."
الذكاء الاصطناعي في Thunderbit يقرأ الصفحة ويقترح أسماء الأعمدة وأنواع البيانات تلقائيًا — مثل "Product Name" و"Price" و"Rating" و"Image URL." تقدر تعدل أسماء الأعمدة، أو تحذف الحقول غير الضرورية، أو تضيف أوامر AI مخصصة لكل عمود (مثل "صنّف إلى High/Medium/Low" أو "ترجم إلى الإنجليزية").
بيطلع لك جدول معاينة بالأعمدة اللي حضرتها قبل ما يتم استخراج أي صف واحد.
الخطوة 3: اضغط "Scrape" وراجع النتائج
نقرة واحدة. Thunderbit يتكفل بالترقيم بين الصفحات — سواء أزرار "Next" أو التمرير اللانهائي — ويستخرج البيانات في جدول منظم. تقدر تختار بين:
- Cloud Scraping: أسرع، ويعالج حتى 50 صفحة في نفس الوقت. يشتغل على المواقع العامة.
- Browser Scraping: يشتغل داخل تبويب Chrome اللي أنت مسجل دخوله. استخدمه للمواقع اللي تتطلب مصادقة (CRMs، الأدلة المحمية، الأدوات الداخلية).
النتائج تظهر في جدول داخل الشريط الجانبي للإضافة. راجع الأخطاء الواضحة قبل التصدير.
الخطوة 4: التصدير إلى Excel أو Google Sheets أو Airtable أو Notion
اضغط زر التصدير واختر الصيغة. Thunderbit يصدّر إلى Excel وGoogle Sheets وAirtable وNotion — مجانًا وبدون حظر دفع. كما تُرفع حقول الصور مباشرة إلى مكتبات الصور في Notion وAirtable، وهذه ميزة ممتازة إذا كنت تستخرج صور منتجات أو صور ملفات شخصية.
لا JSON parsing. لا برمجة. البيانات جاهزة للاستخدام مباشرة.
استخراج الصفحات المتعددة والصفحات الفرعية باستخدام Gemini
أغلب الشروحات تتوقف بصمت عند عنوان URL واحد. مهام scraping الحقيقية ما تتوقف.
استخراج 500 صفحة منتج مع الترقيم والصفحات الفرعية التفصيلية هو شغل كامل — والفجوة بين عرض توضيحي لعنوان واحد والواقع الحقيقي ضخمة.
التعامل مع الترقيم بين الصفحات باستخدام Gemini API (مسار الكود)
لعناوين URL المبنية على أرقام الصفحات (وهو النمط الأكثر شيوعًا)، كرر على الصفحات إلى أن تحصل على نتيجة فارغة:
import time
all_products = []
for page in range(1, 101): # حتى 100 صفحة
url = f"https://example.com/products?page={page}"
md = fetch_clean(url) # دالة HTML→Markdown من السابق
response = client.models.generate_content(
model="gemini-2.5-flash-lite", # رخيص لصفحات القوائم
contents=f"Extract product names and URLs:\n\n{md}",
config=types.GenerateContentConfig(
response_mime_type="application/json",
response_schema=list[ListingItem],
),
)
items = response.parsed
if not items:
break
all_products.extend(items)
time.sleep(4) # احترم حدود الطبقة المجانية
أما المواقع المعتمدة على cursor أو التمرير اللانهائي، فبتحتاج تلتقط نقطة نهاية XHR اللي يستدعيها الـ frontend (افحص تبويب Network في المتصفح) وتكرر عليها مباشرة. هذا أرخص من إعادة العرض، وما تمرر العناصر عبر Gemini إلا إذا كانت الحقول تحتاج تنظيف بواسطة LLM.
انتبه لتكلفة الرموز هنا — كل صفحة تضاعف الفاتورة. استخدم Flash Lite لصفحات القوائم البسيطة، وارفع إلى Flash فقط لاستخراج التفاصيل.
استخراج الصفحات الفرعية للحصول على بيانات أغنى (مسار الكود)
النمط الكلاسيكي ذو المرحلتين: المرحلة 1 تستخرج من صفحة القوائم عناوين URL، والمرحلة 2 تزور كل صفحة تفصيلية للحصول على بيانات أغنى.
# المرحلة 1: جمع الروابط باستخدام Flash Lite الرخيص
class Listing(BaseModel):
product_urls: list[str]
listing = client.models.generate_content(
model="gemini-2.5-flash-lite",
contents=f"Extract product URLs:\n{listing_md}",
config=types.GenerateContentConfig(
response_mime_type="application/json",
response_schema=Listing,
),
).parsed
# المرحلة 2: استخراج التفاصيل باستخدام Flash
class ProductDetail(BaseModel):
name: str
price: str
specs: dict[str, str]
reviews: list[str]
for url in listing.product_urls:
md = fetch_clean(url)
detail = client.models.generate_content(
model="gemini-2.5-flash",
contents=f"Extract product detail:\n{md}",
config=types.GenerateContentConfig(
response_mime_type="application/json",
response_schema=ProductDetail,
),
).parsed
# احفظ التفاصيل...
time.sleep(0.5)
هذا يشتغل، لكنه يحتاج بنية محيطة كثيرة: إزالة التكرار في الروابط، معالجة الأخطاء، الحد من الطلبات، منطق إعادة المحاولة، وتخزين HTML الخام عشان ما تعيد تعديلات المخطط عملية الجلب من جديد. لـ 50 صفحة، الوضع مقبول. لـ 5,000 صفحة، أنت تبني بنية تحتية.
البديل بدون كود: الترقيم المدمج واستخراج الصفحات الفرعية في Thunderbit
Thunderbit يتعامل مع الترقيم سواء بالنقر أو التمرير اللانهائي تلقائيًا — بدون ما تكتب loop. ولإثراء الصفحات الفرعية، ميزة "Scrape Subpages" تزور كل صفحة تفصيل مرتبطة من صفحة القوائم وتغني الجدول الأصلي بحقول أعمق. نقرة واحدة، لا سكربت واحد.
وضع Cloud scraping يعالج حتى 50 صفحة في نفس الوقت، وهذا فرق حقيقي لما تستخرج كتالوج منتجات أو دليل عقارات على نطاق واسع. وللي ما يبي يدير loops Python ومنطق إعادة المحاولة، هذا الخيار العملي. (وللمزيد عن استخراج البيانات من المواقع إلى Excel، عندنا شرح منفصل.)
استخراج باللقطة: اختصار Gemini متعدد الوسائط
فيه طريقة أغلب الشروحات تتجاهلها تمامًا: ترسل لقطة شاشة لصفحة ويب إلى واجهة الرؤية في Gemini بدل HTML الخام. أفاد أحد المطورين بأن لقطة شاشة واحدة تكلف فقط حوالي 258 رمزًا — مقارنة بآلاف الرموز حتى مع Markdown المنظف. هذا فرق تكلفة كبير جدًا للاستخراجات البسيطة.
كيف تستخدم Vision API في Gemini لاستخراج الويب
التقط لقطة شاشة باستخدام Playwright، وشفّرها، وأرسلها إلى Gemini:
from playwright.sync_api import sync_playwright
from google import genai
from google.genai import types
from pydantic import BaseModel
class Product(BaseModel):
title: str
price: str
with sync_playwright() as p:
page = p.chromium.launch().new_page()
page.goto("https://example.com/product/widget-pro")
page.wait_for_load_state("networkidle")
png_bytes = page.screenshot(full_page=False) # الجزء الظاهر فقط
client = genai.Client()
resp = client.models.generate_content(
model="gemini-2.5-flash",
contents=[
{"inline_data": {"mime_type": "image/png", "data": png_bytes}},
"Extract the product title and price as JSON.",
],
config=types.GenerateContentConfig(
response_mime_type="application/json",
response_schema=Product,
),
)
print(resp.parsed)
وفقًا لوثائق Google الخاصة برموز الصور، الصورة اللي ما يتجاوز كلا بعديها 384 بكسل تكلف 258 رمزًا. الصور الأكبر تُقسم إلى مربعات 768×768 بتكلفة 258 رمز لكل مربع. لقطة قصيرة للجزء الظاهر فقط (258–1,600 رمز) تتفوق بسهولة على HTML الخام — لكن لقطة طويلة جدًا لصفحة كاملة (~5,000 رمز) ممكن تخسر فعليًا أمام Markdown نظيف (~765–1,200 رمز).
قيود استخراج اللقطات
- دقة أقل للجداول الكثيفة: التصاميم متعددة الأعمدة والخطوط الصغيرة والعناصر المتداخلة تؤدي إلى قراءات ناقصة — مو هلوسة، بل فقدان تسميات أو عدم تطابق في العناوين.
- ما يقدر يتبع الروابط: الرؤية ترجع نصًا، مو روابط قابلة للنقر. لا ترقيم ولا إثراء للصفحات الفرعية.
- سقف الدقة: النص الأصغر من نحو 10 بكسل يُقرأ غلط كثيرًا. Google تصغّر المحتوى إلى حوالي 1,568 بكسل على الحافة الأطول.
- تكلفة الالتقاط: تشغيل Playwright والانتظار حتى networkidle يأخذ 2–5 ثوانٍ لكل صفحة، وهذا يتراكم على نطاق كبير.
استخراج اللقطات ممتاز للصفحات الثقيلة بالـ JS، والمواقع المحجوبة بالبوتات (حيث requests.get() يرجع خطأ 403 لكن المتصفح يعرضها تمامًا)، والصفحات اللي فيها بيانات داخل مخططات أو صور. أما الصفحات الطويلة المليانة نصوص، فـ Markdown يبقى الخيار الأفضل.
Thunderbit يستخدم أسلوب مشابه قائم على رؤية الذكاء الاصطناعي في استخراج الصور وPDF — أضف صورة أو PDF ويرجع لك جدول منظم، بدون الحاجة لسكريبت التقاط شاشة أو التعامل مع base64. (شوف أيضًا: كيفية تحويل الصور إلى Excel.)
متى يفشل Gemini Web Scraping (وماذا تفعل بدلًا من ذلك)
Gemini هو محرك استخراج، مو محرك جلب. إذا ما قدرت توصل محتوى الصفحة إلى Gemini، فما راح يفيدك. نقطة.
فيه عدة سيناريوهات شائعة تنهار فيها الطريقة بالكامل، ومعظم الشروحات تتعامل معها كفكرة جانبية. أنا أفضل أكون مباشر.
| القيود | وش يحدث | الحل |
|---|---|---|
| مكافحة الروبوتات / Cloudflare | يتم حظر طلبات الـ API؛ أو requests.get() يرجع خطأ 403 أو صفحة تحقق | استخدم proxies مع تدوير TLS fingerprint، أو أدوات تعتمد على المتصفح (وضع Browser Scraping في Thunderbit يستخدم جلستك المسجلة دخولها) |
| حدود نافذة الرموز | الصفحات الكبيرة تتجاوز السياق القابل للاستخدام (~200K–300K للاستخراج الموثوق، رغم دعم 1M نظريًا) | تنظيف HTML إلى Markdown، تقسيم الصفحات، أو استخدام اللقطات |
| الهلوسة في المحتوى البصري | Gemini يخمّن من alt text أو captions بدل محتوى الصورة الحقيقي | تحقق من المخرجات؛ استخدم Vision API صراحةً لبيانات الصور؛ أضف grounded validators |
| حدود معدل الـ API | يتم تقييدك على نطاق واسع — الطبقة المجانية حوالي 100 RPD على Pro و1,000 RPD على Flash Lite | إدارة طوابير، تجميع بالدفعات (خصم 50%)، أو الانتقال إلى أدوات جاهزة |
| عدم اتساق الاستخراج (النماذج الخفيفة) | الحقول الاختيارية والطوابع الزمنية والبيانات المتداخلة تُفقد أو تُفبرك | الترقية إلى Flash/Pro، أو إضافة قيود صريحة على المخطط |
| المواقع المحمية (LinkedIn وغيرها) | ترجع أخطاء أو بيانات فارغة | استخدم scraping عبر المتصفح مع جلسة نشطة (Thunderbit يدعم ذلك)؛ واحترم شروط الخدمة |
بعض هذي النقاط تحتاج سياق أكثر.
مكافحة الروبوتات صارت الآن واعية بـ LLMs بشكل نشط. Cloudflare يحظر روبوتات الذكاء الاصطناعي افتراضيًا اعتبارًا من يوليو 2025، مع حظر 416 مليار طلب من روبوتات AI في أول خمسة أشهر. وأضافت Datadome كشفًا خاصًا بـ LLMs في 2025 وشافت حركة روبوتات LLM تتضاعف أربع مرات. إن requests.get() البسيط مع Gemini شبه ميت أمام المواقع المحمية بـ Datadome. المشكلة هنا هي fingerprint مو عنوان IP — تدوير عناوين IP وحده ما يفيد إذا كان TLS fingerprint يصرخ "Python requests".
الهلوسة موضوع دقيق. النماذج المدربة على المساعدة تميل إلى تعبئة الحقول الاختيارية باختلاقات معقولة بدل ما ترجع null. شفت نماذج تخمّن العلامة التجارية من slug الرابط، وتستنتج العملة من TLD، وتكتب أعداد مراجعات تبدو مقنعة لكنها مزيفة من خلال skeleton loaders. حلها يكون بمخططات Pydantic صارمة، وحلقات إعادة محاولة مع تغذية راجعة من التحقق، وvalidators grounded تتحقق من أن القيم المستخرجة موجودة فعلًا في HTML المصدر، واستخراج على مرحلتين (Flash يستخرج، وPro يتحقق من عينة).
نافذة السياق 1M ليست قابلة للاستخدام عند 1M. تظهر أبحاث Chroma وغيرها أن جودة الاستدلال تتدهور قبل حد الرموز بكثير. تعامل مع حوالي 200K–300K رمز كسقف عملي للاستخراج المنظم.
شجرة قرار: أي أداة تستخدم؟
- حجم منخفض + صفحات بسيطة + مطوّر → الطبقة المجانية من Gemini API + Python
- حجم متوسط + مخططات معقدة + مطوّر → Gemini 2.5 Flash مدفوع + Python + structured outputs + preprocessing
- أي حجم + غير مطوّر + صفحات خلف تسجيل دخول أو فيها ترقيم كثيف → Thunderbit
- حجم ضخم جدًا + مكافحة bots قوية + مهمة حرجة → بنية scraping مُدارة (خدمات proxies) + Gemini كطبقة استخراج
نصائح Gemini Web Scraping لتوفير الوقت والمال
سواء كنت تكتب Python أو تضغط أزرار، هالنقاط بتوفر عليك كثير متاعب.
- حوّل HTML دائمًا إلى Markdown قبل إرساله إلى Gemini. توفير 5–10 مرات في الرموز أمر معتاد؛ وتقدر توصل إلى 95% أيضًا إذا سويت trimming مسبق باستخدام BeautifulSoup.
- استخدم
google-genaiفقط. لا تستخدم الحزمة المهجورةgoogle-generativeai— انتهى دعمها. - ابدأ بـ Flash Lite فقط للمخططات المسطحة. انتقل إلى Flash بمجرد ظهور التداخل أو الحقول الاختيارية.
- تجنب
Field(default=...)في مخططات Pydantic اللي ترسلها إلى Gemini. استخدمsku: str | None = Noneعلى مستوى النوع. - Pydantic مع
response_schemaعنصر أساسي — لأنه عقدة وضمان ضد الهلوسة في نفس الوقت. - استخدم Batch API للمهام التي تتجاوز 1,000 صفحة — خصم 50% وما تنحسب ضمن RPM الفوري.
- تحقق يدويًا من عينة عشوائية من 10 إلى 50 صفًا قبل توسعة أي extractor جديد. الانحراف في الدقة ما يبان إلا لما تنظر.
- احفظ HTML الخام على القرص — تعديلات المخطط ما المفروض تعيد جلب الصفحات.
- سجّل عنوان المصدر في كل صف عشان تقدر تعيد الزحف لصفحات منفردة بدون إعادة تشغيل المهمة كاملة.
- لمستخدمي بدون كود: استخدم أوامر AI المخصصة لكل عمود في Thunderbit لنقل هندسة الأوامر إلى طبقة الجدول — ترجم، صنف، لخص على مستوى العمود.
ومعلومة إضافية: لا تنشر الطبقة المجانية في الإنتاج. تم خفض الحدود 50–80% في ديسمبر 2025 وقد تُخفض مرة ثانية بدون إشعار.
الخلاصة
المسافة بين عرض Gemini على عنوان URL واحد وبين خط إنتاج جاهز للإنتاج أكبر بكثير مما توحي به أغلب الشروحات.
مسار Python + Gemini API يعطي المطورين تحكم كامل في اختيار النموذج، والمعالجة المسبقة، والترقيم، وتصميم المخطط. أما المسار بدون كود — بأدوات مثل Thunderbit — فيعطي مستخدمي الأعمال نفس استخراج البيانات المنظمة بدون لمس الطرفية.
اللي أستخلصه هنا هو:
- اختيار النموذج مهم. Flash Lite للحجم الكبير، Flash للتوازن، Pro للتعقيد. لا تبدأ بأرخص خيار ثم تستغرب ليه بياناتك غلط.
- استخراج الصفحات المتعددة والفرعية هو المكان اللي تقصر فيه الشروحات — وهو أيضًا المكان اللي يصير فيه الشغل الحقيقي. كلا المسارين هنا يعالجون هالفجوة.
- القيود الواضحة توفر وقتك. إذا كان الموقع يحظر طلبات الـ API، ما راح ينفعك أي prompt engineering. اختر الأداة المناسبة للمهمة، مو الأداة الأجمل فقط.
- تحويل HTML إلى Markdown هو أعلى تحسين تأثيرًا — لأنه يخفض التكاليف بأكثر من 75% ويقلل الهلوسة.
إذا تبي تجرب المسار بدون كود، فـ الطبقة المجانية من Thunderbit تتيح لك استخراج كم صفحة وتشوف النتائج بنفسك. وإذا تفضل البرمجة، فالطبقة المجانية من Gemini API تكفي تبني نموذج أولي خلال فترة بعد الظهر. في كلتا الحالتين، بتطلع ببيانات منظمة أسرع بكثير من النسخ واللصق اليدوي. ولمزيد من المعلومات عن استخراج البيانات من المواقع إلى Excel أو أفضل AI web scrapers، غطينا هالمواضيع بعمق في مدونتنا.
جرّب Thunderbit لاستخراج الويب بالذكاء الاصطناعي Get Started Free
الأسئلة الشائعة
كم تبلغ تكلفة استخدام Gemini في web scraping؟
Gemini API فيها طبقة مجانية بحوالي 100 طلب/يوم على Pro، و500/يوم على Flash، و1,000/يوم على Flash Lite (اعتبارًا من أوائل 2026 — وقد خُفضت هذي الحدود في ديسمبر 2025). أما في الطبقة المدفوعة، فاستخراج 10,000 صفحة منتج يكلف تقريبًا $1.50 مع Flash Lite، أو $6 مع Flash، أو $25 مع Pro — على افتراض أنك تحوّل HTML إلى Markdown أولًا. بدون المعالجة المسبقة، التكاليف ترتفع 4 إلى 5 مرات. وBatch API يعطي خصم 50% للمهام غير الفورية.
هل يمكن لـ Gemini استخراج مواقع تتطلب تسجيل دخول؟
لا تقدر Gemini API وحدها تسجل دخول للمواقع — هي تعالج فقط المحتوى اللي ترسله لها. تحتاج تجيب HTML بنفسك باستخدام جلسة مصادقة خاصة فيك (مثل متصفح headless مع ملفات تعريف ارتباط محفوظة). وضع Browser Scraping في Thunderbit يتعامل مع هذا بشكل أصلي: يشتغل داخل تبويب Chrome اللي أنت مسجل دخوله فيه، لذلك أي موقع تقدر تشوفه في متصفحك يقدر Thunderbit يستخرجه.
هل Gemini web scraping قانوني؟
القانونية تعتمد على شروط خدمة الموقع، ونوع البيانات، والولاية القضائية. في الولايات المتحدة، وبعد قضيتي hiQ v. LinkedIn وMeta v. Bright Data، يُنظر عمومًا إلى استخراج البيانات المتاحة علنًا بدون تسجيل دخول على أنه مسموح — لكن كل حالة تعتمد على تفاصيلها. أما scraping خلف تسجيل الدخول فيحمل مخاطر قانونية أعلى. البيانات الشخصية لمواطني الاتحاد الأوروبي تخضع لـ GDPR بغض النظر عن كون الموقع عامًا أو لا. احترم دائمًا robots.txt وشروط الخدمة، وتجنب استخراج البيانات الشخصية بدون أساس قانوني.
هل أقدر أستخدم Gemini لاستخراج المواقع الديناميكية الثقيلة بـ JavaScript؟
نعم، لكن لازم تعرض JavaScript أولًا — إما باستخدام متصفح headless مثل Playwright أو Puppeteer، أو عبر التقاط نقاط نهاية API الخاصة بالموقع مباشرة. بعد ما تحصل على HTML المعروض، نظفه وأرسله إلى Gemini كالمعتاد. وبديلًا عن ذلك، يمكن لاستخراج اللقطات باستخدام Vision API في Gemini يتجاوز عرض JS بالكامل — إذا كان يظهر في المتصفح، Gemini يقدر يشوفه. Thunderbit يتعامل مع الصفحات المعروضة بواسطة JS تلقائيًا في وضعي Cloud وBrowser scraping.
ما الفرق بين استخدام Gemini للاستخراج وبين أداة مخصصة مثل Thunderbit؟
Gemini هو محرك استخراج — يفسر المحتوى ويرجع بيانات منظمة. لكنه ما يزور المواقع، ولا يدير الترقيم، ولا يتعامل مع المصادقة، ولا يصدّر إلى جداول البيانات. أنت لسه تحتاج شيء يجلب محتوى الصفحة إلى Gemini، وشيء يستفيد من النتيجة. الأدوات المخصصة مثل Thunderbit تجمع الجلب، والعرض، والاستخراج بالذكاء الاصطناعي، والترقيم، وإثراء الصفحات الفرعية، والتصدير في حزمة واحدة — بدون أي بنية وسيطة.
اعرف المزيد


