انتقل إلى المحتوى

تجريف الويب المبسط – تجريف التنسيقات الدقيقة

تجريف الويب المبسط – تجريف التنسيقات الدقيقة

المُقدّمة

تجريف الويب هو عملية استخراج البيانات من مواقع الويب تلقائيًا. يتضمن كتابة برامج يمكنها فهم هياكل صفحات الويب واستخراج المعلومات ذات الصلة. في حين أن تجريف الويب قد يكون أمرًا صعبًا بالنسبة لمواقع الويب المعقدة، إلا أن هناك تقنيات معينة تجعل المهمة أسهل. إحدى هذه التقنيات هي كشط التنسيقات الدقيقة.

توفر تنسيقات Microformats بيانات التعريف الدلالية المضمنة في تعليمات HTML البرمجية بطريقة موحدة. إنها تسهل على البرامج استخراج معلومات مفيدة من صفحات الويب. في هذا الدليل، سنتعلم أساسيات التنسيقات الدقيقة والأنواع الشائعة وكيفية الاستفادة منها في استخراج بيانات الويب بسهولة باستخدام لغة Python.

ما هي التنسيقات الدقيقة؟

تم إنشاء تنسيقات Microformat لتوحيد تمثيل كائنات بيانات الويب المهمة بحيث يمكن قراءتها آليًا. في أغلب الأحيان، يتم استخدام تنسيقات microformat لإنشاء بطاقات معاينة لصفحات الويب. يتم استخدامها بشكل شائع لتوفير طرق عرض البيانات لمحركات البحث والشبكات الاجتماعية وقنوات الاتصال الأخرى.

على سبيل المثال، عندما تقوم بنشر رابط على وسائل التواصل الاجتماعي أو Slack، فإنه يعرض بطاقة معاينة تحتوي على العنوان والوصف والصورة المصغرة. يتم إنشاء ذلك عن طريق استخراج تنسيقات microformat من تلك الصفحة.

الجانب السلبي الوحيد هو أن تنسيقات microformat لا تحتوي على مجموعة بيانات الصفحة بأكملها. قد نحتاج إلى توسيع محلل التنسيق الدقيق من خلال تحليل HTML باستخدام أدوات مثل Beautiful Soup أو محدد CSS وموزعي XPath.

أنواع تنسيقات Microformat الشائعة

هناك العديد من معايير التنسيق المصغر المستخدمة عبر الويب. دعنا نستكشف بعض الأنواع الشائعة وكيفية استخراجها باستخدام مكتبة Python extruct.

JSON-LD

JSON-LD هو التنسيق المصغر الحديث الأكثر شيوعًا. ويستخدم مستندات JSON المضمنة التي تمثل كائنات schema.org مباشرة.

فيما يلي مثال لترميز JSON-LD وكيفية تحليله باستخدام extruct:

import extruct

html = """<script type="application/ld+json">
{
  "@context": "http://schema.org",
  "@type": "Person",
  "name": "John Doe",
  "image": "johndoe.jpg",
  "jobTitle": "Software Engineer",
  "telephone": "(555) 555-5555",
  "email": "[email protected]",
  "address": {
    "@type": "PostalAddress",
    "streetAddress": "123 Main St",
    "addressLocality": "Anytown",
    "addressRegion": "CA", 
    "postalCode": "12345"
  }
}
</script>"""

data = extruct.JsonLdExtractor().extract(html)
print(data)

يؤدي هذا إلى إخراج كائن JSON-LD Person مع حقول schema.org مثل الاسم والصورة وjobTitle وما إلى ذلك.

يعد JSON-LD سهل التنفيذ ولكنه قد لا يتطابق مع بيانات الصفحة لأنه منفصل عن البيانات المرئية.

الجزئية

البيانات الجزئية هي التنسيق الثاني الأكثر شيوعًا الذي يستخدم سمات HTML لترميز حقول التنسيق الدقيق. يعد هذا أمرًا رائعًا لتجريد الويب لأنه يغطي بيانات الصفحة المرئية.

فيما يلي مثال وكيفية تحليله:

html = """<div itemscope itemtype="http://schema.org/Person">
  <h1 itemprop="name">John Doe</h1>
  <img itemprop="image" src="johndoe.jpg" alt="John Doe">
  <p itemprop="jobTitle">Software Engineer</p>
  <p itemprop="telephone">(555) 555-5555</p>
  <p itemprop="email"><a href="mailto:[email protected]">[email protected]</a></p>
  <div itemprop="address" itemscope itemtype="http://schema.org/PostalAddress">
    <p>
      <span itemprop="streetAddress">123 Main St</span>,
      <span itemprop="addressLocality">Anytown</span>,
      <span itemprop="addressRegion">CA</span>
      <span itemprop="postalCode">12345</span>
    </p>
  </div>
</div>"""

data = extruct.MicrodataExtractor().extract(html)
print(data)

تتطابق البيانات الجزئية مع بيانات المصدر بشكل أقرب لأنها تستخدم نفس البيانات المعروضة على الصفحة.

تنسيق RDFa

يشبه RDFa البيانات الجزئية باستخدام سمات HTML لتنسيقات microformat. تشترك في نفس المزايا التي تتمتع بها البيانات الجزئية.

هنا مثال:

html = """<div vocab="http://schema.org/" typeof="Person">
  <h1 property="name">John Doe</h1>
  <img property="image" src="johndoe.jpg" alt="John Doe"/>
  <p property="jobTitle">Software Engineer</p>
  <p property="telephone">(555) 555-5555</p>
  <p property="email"><a href="mailto:[email protected]">[email protected]</a></p>
  <div property="address" typeof="PostalAddress">
    <p>
      <span property="streetAddress">123 Main St</span>,
      <span property="addressLocality">Anytown</span>,
      <span property="addressRegion">CA</span>
      <span property="postalCode">12345</span>
    </p>
  </div>
</div>"""

data = extruct.RDFaExtractor().extract(html)
print(data)

تتطابق بيانات RDFa مع المصدر الحقيقي ولكن الإخراج معقد بعض الشيء.

OpenGraph

يتم استخدام OpenGraph الخاص بفيسبوك لإنشاء بطاقات معاينة في المنشورات الاجتماعية. وهو يدعم كائنات schema.org ولكن نادرًا ما يتم استخدامه خارج معاينات مواقع الويب.

هنا مثال:

html = """<head>
  <meta property="og:type" content="profile"/> 
  <meta property="og:title" content="John Doe"/>
  <meta property="og:image" content="johndoe.jpg"/>
  <meta property="og:description" content="Software Engineer"/>
  <meta property="og:phone_number" content="(555) 555-5555"/>
  <meta property="og:email" content="[email protected]"/>
  <meta property="og:street-address" content="123 Main St"/>
  <meta property="og:locality" content="Anytown"/>
  <meta property="og:region" content="CA"/>
  <meta property="og:postal-code" content="12345"/>
</head>"""

data = extruct.OpenGraphExtractor().extract(html)
print(data) 

يمكن أن يختلف Opengraph عن بيانات الصفحة لأنه ليس جزءًا من الصفحة الطبيعية.

تنسيق ميكروفورمات

يعد Microformat أحد أقدم التنسيقات التي سبقت schema.org بمخططاته الخاصة للأشخاص والمؤسسات والأحداث والمنتجات وما إلى ذلك.

هنا مثال:

html = """<div class="h-card">
  <h1 class="fn">John Doe</h1> 
  <img class="photo" src="johndoe.jpg" alt="John Doe">
  <p class="title">Software Engineer</p>
  <p class="tel">(555) 555-5555</p>
  <a class="email" href="mailto:[email protected]">[email protected]</a>
  <div class="adr">
    <span class="street-address">123 Main St</span>,
    <span class="locality">Anytown</span>,
    <span class="region">CA</span>
    <span class="postal-code">12345</span>
  </div>
</div>"""

data = extruct.MicroformatExtractor().extract(html)
print(data)

كشط التنسيقات الدقيقة في بايثون

دعونا نرى كيفية الاستفادة من تنسيقات microformat لتجميع الويب باستخدام مكتبة Python extruct. سنقوم بجمع عينات من المواقع باستخدام التقنيات المغطاة.

تثبيت المستخرج باستخدام:

pip install extruct

كشط JSON-LD:

import extruct
import requests

url = "https://example.com" 

# Fetch HTML 
response = requests.get(url)
html = response.text

# Extract JSON-LD
data = extruct.JsonLdExtractor().extract(html)
print(data)

سيؤدي هذا إلى طباعة جميع كائنات JSON-LD المضمنة في الصفحة.

وبالمثل، يمكننا كشط التنسيقات الأخرى:

# Microdata
data = extruct.MicrodataExtractor().extract(html)

# RDFa
data = extruct.RDFaExtractor().extract(html)  

# OpenGraph
data = extruct.OpenGraphExtractor().extract(html)

# Microformat
data = extruct.MicroformatExtractor().extract(html)

يحتوي extruct أيضًا على طريقة استخراج موحدة تستخرج جميع التنسيقات مرة واحدة:

import extruct

data = extruct.extract(html)
print(data.keys()) # ‘microdata‘, ‘json-ld‘, ‘opengraph‘, etc.

وهذا يجعل من السهل التخلص من تنسيقات microformat المتعددة بكفاءة.

مثال على كشط صفحة منتج Etsy

دعونا نرى مثالًا حقيقيًا لحذف صفحة منتج Etsy باستخدام التنسيقات الدقيقة.

سنستخدم واجهة برمجة تطبيقات منتج Etsy لجلب HTML للمنتج واستخراجه لاستخراج التنسيقات الدقيقة.

import requests
import extruct

product_id = "1214112656"

# Fetch product HTML
url = f"https://www.etsy.com/listing/{product_id}"
response = requests.get(url)
html = response.text

# Extract all microformats
data = extruct.extract(html)
print(data.keys())

# Get JSON-LD product 
product = next(obj for obj in data["json-ld"] if obj["@type"] == "Product")

# Print selected fields:
print(product["name"])
print(product["price"])
print(product["reviewCount"])

يؤدي هذا إلى طباعة اسم المنتج والسعر وعدد المراجعة والحقول الأخرى المستخرجة من JSON-LD.

يمكننا دمج هذه التقنيات في أداة استخراج بيانات الويب الكاملة لأي موقع يستخدم التنسيقات الدقيقة.

نصائح القشط

فيما يلي بعض النصائح حول عملية استخراج تنسيقات microformat بشكل فعال:

  • افحص مصدر الصفحة لمعرفة ما إذا كان هناك أي تنسيقات microformat. التركيز على تجريف تلك الأكثر اكتظاظا بالسكان.

  • بالنسبة لمواقع مثل Etsy، يحتوي المنتج JSON-LD على أفضل البيانات. يعد OpenGraph مفيدًا للمواقع الاجتماعية.

  • قم بتطبيع البيانات المستخرجة إلى JSON/dicts عادية لتسهيل معالجتها.

  • قم بتوسيع عملية التحليل باستخدام BeautifulSoup أو المكتبات المشابهة إذا كانت هناك حاجة إلى مزيد من البيانات.

  • استخدم الوكلاء أو الأدوات مثل Scrapfly إذا كان الموقع يحظر عملية التجريد.

تعمل تنسيقات Microformat على تسهيل الحصول على البيانات المنظمة من صفحات الويب. يمكن أن يؤدي دمجها في أدوات الكشط الخاصة بك إلى توفير الكثير من الجهد في تحليل HTML.

نبذة عامة

توفر التنسيقات الدقيقة مثل JSON-LD وMicrodata وRDFa بيانات منظمة دلالية على صفحات الويب لسهولة استخراجها.

إنها تسمح باستخلاص المعلومات الأساسية مثل المنتجات والمقالات والمراجعات وملفات تعريف الأشخاص وما إلى ذلك دون تحليل HTML معقد.

من خلال تحديد هذه التنسيقات واستخراجها باستخدام مكتبة extruct، يمكننا إنشاء أدوات استخراج ويب قابلة للتطوير بشكل أسرع باستخدام Python.

لن تغطي تنسيقات Microformat جميع البيانات، لذا يلزم إجراء تحليل إضافي. لكنها توفر بداية رائعة للكاشطات القوية.

آمل أن يكون هذا المنشور قد ساعد في شرح قيمة استخراج التنسيقات الدقيقة لتسهيل استخراج بيانات الويب! اسمحوا لي أن أعرف إذا كان لديك أي أسئلة أخرى.

الوسوم (تاج):

الانضمام إلى محادثة

لن يتم نشر عنوان بريدك الإلكتروني. الحقول المشار إليها إلزامية *