Web Scraping باستخدام Gemini الذي يعمل فعلاً (بالكود وبدون كود)

آخر تحديث في April 15, 2026
Web Scraping باستخدام Gemini الذي يعمل فعلاً (بالكود وبدون كود)

معظم شروحات "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. ولا قواعد هشة تنهار أول ما الموقع يغير شكله شوي.

العملية الأساسية تكون كذا:

  1. جلب الصفحة باستخدام requests أو متصفح headless أو إضافة Chrome
  2. تنظيف المحتوى وتحويله، وغالبًا من HTML إلى Markdown لتقليل تكلفة الرموز
  3. إرساله إلى Gemini مع schema يوضح الحقول المطلوبة
  4. استلام 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 أو تضغط أزرار، هالنقاط بتوفر عليك كثير متاعب.

  1. حوّل HTML دائمًا إلى Markdown قبل إرساله إلى Gemini. توفير 5–10 مرات في الرموز أمر معتاد؛ وتقدر توصل إلى 95% أيضًا إذا سويت trimming مسبق باستخدام BeautifulSoup.
  2. استخدم google-genai فقط. لا تستخدم الحزمة المهجورة google-generativeai — انتهى دعمها.
  3. ابدأ بـ Flash Lite فقط للمخططات المسطحة. انتقل إلى Flash بمجرد ظهور التداخل أو الحقول الاختيارية.
  4. تجنب Field(default=...) في مخططات Pydantic اللي ترسلها إلى Gemini. استخدم sku: str | None = None على مستوى النوع.
  5. Pydantic مع response_schema عنصر أساسي — لأنه عقدة وضمان ضد الهلوسة في نفس الوقت.
  6. استخدم Batch API للمهام التي تتجاوز 1,000 صفحة — خصم 50% وما تنحسب ضمن RPM الفوري.
  7. تحقق يدويًا من عينة عشوائية من 10 إلى 50 صفًا قبل توسعة أي extractor جديد. الانحراف في الدقة ما يبان إلا لما تنظر.
  8. احفظ HTML الخام على القرص — تعديلات المخطط ما المفروض تعيد جلب الصفحات.
  9. سجّل عنوان المصدر في كل صف عشان تقدر تعيد الزحف لصفحات منفردة بدون إعادة تشغيل المهمة كاملة.
  10. لمستخدمي بدون كود: استخدم أوامر 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 تجمع الجلب، والعرض، والاستخراج بالذكاء الاصطناعي، والترقيم، وإثراء الصفحات الفرعية، والتصدير في حزمة واحدة — بدون أي بنية وسيطة.

اعرف المزيد

Shuai Guan
Shuai Guan
الرئيس التنفيذي في Thunderbit | خبير في أتمتة البيانات بالذكاء الاصطناعي Shuai Guan هو الرئيس التنفيذي لشركة Thunderbit وخريج كلية الهندسة بجامعة ميشيغان. وبالاستناد إلى ما يقرب من عشر سنوات من الخبرة في مجالي التقنية وبنية SaaS، يتخصص في تحويل نماذج الذكاء الاصطناعي المعقدة إلى أدوات عملية لاستخراج البيانات بدون الحاجة إلى البرمجة. في هذه المدونة، يشارك رؤى صريحة ومجرّبة ميدانيًا حول استخراج البيانات من الويب واستراتيجيات الأتمتة، لمساعدتك على بناء سير عمل أذكى يعتمد على البيانات. وعندما لا يكون منشغلاً بتحسين تدفقات العمل الخاصة بالبيانات، يوجّه نفس دقته واهتمامه بالتفاصيل إلى شغفه بالتصوير الفوتوغرافي.

جرّب Thunderbit

استخرج العملاء المحتملين وبيانات أخرى في خطوتين فقط. مدعوم بالذكاء الاصطناعي.

احصل على Thunderbit مجاني
استخرج البيانات باستخدام الذكاء الاصطناعي
انقل البيانات بسهولة إلى Google Sheets أو Airtable أو Notion
Chrome Store Rating
PRODUCT HUNT#1 Product of the Week