زاحف الويب هو ميزة مدمجة في واجهات برمجة تطبيقات مكشطة. إنها أداة تستخدم لاكتشاف عناوين URL المستهدفة ، وتحديد المحتوى ذي الصلة ، وقم بتسليمها بكميات كبيرة. يزحف مواقع الويب في الوقت الفعلي وعلى نطاق واسع لتقديم جميع المحتوى أو فقط البيانات التي تحتاجها بناءً على المعايير التي اخترتها.
هناك ثلاث مهام رئيسية يمكن للزاحف القيام بها:
أداء اكتشاف URL.
زحف جميع الصفحات على الموقع ؛
فهرس جميع عناوين URL على مجال.
استخدمه عندما تحتاج إلى الزحف عبر الموقع واستلام البيانات المحسورة بكميات كبيرة ، وكذلك لجمع قائمة عناوين URL في فئة معينة أو من موقع ويب بأكمله.
هناك ثلاثة أنواع إخراج البيانات التي يمكنك تلقيها عند استخدام Web Crawler: قائمة عناوين URL والنتائج المحسورة وملفات HTML. إذا لزم الأمر ، يمكنك ضبط الزاحف على الويب لتحميل النتائج على التخزين السحابي الخاص بك.
يمكنك بسهولة التحكم في نطاق الزحف عن طريق ضبط عرضه وعمقه مع المرشحات. يمكن لزاحف الويب أيضًا استخدام معلمات تجريف مختلفة ، مثل الموقع الجغرافي ووكيل المستخدم ، لزيادة معدل نجاح الوظائف الزحف. تعتمد معظم معلمات التجريف هذه على واجهة برمجة تطبيقات مكشطة تستخدمها.
للتحكم في وظيفتك الزاحفة ، تحتاج إلى استخدام نقاط نهاية مختلفة. يمكنك بدء وظيفتك وإيقافها واستئنافها ، والحصول على معلومات الوظيفة ، والحصول على قائمة أجزاء النتائج ، والحصول على النتائج. فيما يلي نقاط النهاية التي سنستخدمها في هذا البرنامج التعليمي الزحف. لمزيد من المعلومات وأمثلة الإخراج ، تفضل بزيارة وثائقنا.
نقطة النهاية: https://ect.oxylabs.io/v1/jobs
الطريقة: POST
المصادقة: Basic
طلب الرؤوس: Content-Type: application/json
ستوفر نقطة النهاية هذه قائمة عناوين URL الموجودة أثناء معالجة الوظيفة.
نقطة النهاية: https://ect.oxylabs.io/v1/jobs/{id}/sitemap
)/sitemap
الطريقة: GET
المصادقة: Basic
نقطة النهاية: https://ect.oxylabs.io/v1/jobs/{id}/aggregate
الطريقة: GET
المصادقة: Basic
يمكن أن تتكون النتائج الإجمالية من الكثير من البيانات ، لذلك نقسمها إلى أجزاء متعددة بناءً على حجم الجزء الذي تحدده. استخدم نقطة النهاية هذه للحصول على قائمة بملفات القطع المتاحة.
نقطة النهاية: https://ect.oxylabs.io/v1/jobs/{id}/aggregate/{chunk}
الطريقة: GET
المصادقة: Basic
مع نقطة النهاية هذه ، يمكنك تنزيل جزء معين من النتيجة الإجمالية. تعتمد محتويات جسم الاستجابة على نوع الإخراج الذي تختاره.
يمكن أن تكون النتيجة واحدة مما يلي:
فهرس (قائمة عناوين URL)
ملف JSON الكلي مع جميع النتائج المحلية
ملف JSON الكلي مع جميع نتائج HTML
لراحتك ، قمنا بوضع جميع المعلمات المتاحة التي يمكنك استخدامها في الجدول أدناه. يمكن العثور عليها أيضًا في وثائقنا.
المعلمة | وصف | القيمة الافتراضية |
---|---|---|
عنوان URL | عنوان URL لنقطة البداية | - |
filters | يتم استخدام هذه المعلمات لتكوين اتساع وعمق وظيفة الزحف ، وكذلك تحديد عناوين URL التي يجب تضمينها في النتيجة النهائية. انظر هذا القسم لمزيد من المعلومات. | - |
filters:crawl | يحدد أي زاحف على شبكة الإنترنت عناوين URLS سوف يتضمن في النتيجة النهائية. انظر هذا القسم لمزيد من المعلومات. | - |
filters:process | يحدد أي من عناوين URLS الزاحف على شبكة الإنترنت سوف يتخلص. انظر هذا القسم لمزيد من المعلومات. | - |
filters:max_depth | يحدد الحد الأقصى لطول سلاسل URL التي سيتبعها زاحف الويب. انظر هذا القسم لمزيد من المعلومات. | 1 |
scrape_params | تُستخدم هذه المعلمات لضبط الطريقة التي نقوم بها بوظائف الكشط. على سبيل المثال ، قد ترغب في تنفيذ JavaScript أثناء زحف موقع ما ، أو قد تفضلنا استخدام الوكلاء من موقع معين. | - |
scrape_params:source | انظر هذا القسم لمزيد من المعلومات. | - |
scrape_params:geo_location | الموقع الجغرافي الذي يجب أن يتم تكييف النتيجة. انظر هذا القسم لمزيد من المعلومات. | - |
scrape_params:user_agent_type | نوع الجهاز والمتصفح. انظر هذا القسم لمزيد من المعلومات. | desktop |
scrape_params:render | يتيح تقديم JavaScript. استخدم عندما يتطلب الهدف JavaScript لتحميل المحتوى. إذا كنت ترغب في استخدام هذه الميزة ، فقم بتعيين قيمة المعلمة على HTML. انظر هذا القسم لمزيد من المعلومات. | - |
output:type_ | نوع الإخراج. يمكننا إرجاع خريطة sitemap (قائمة عناوين URL التي تم العثور عليها أثناء الزحف) أو ملف إجمالي يحتوي على نتائج HTML أو البيانات المحسورة. انظر هذا القسم لمزيد من المعلومات. | - |
upload | يتم استخدام هذه المعلمات لوصف موقع التخزين السحابي حيث ترغب في وضع النتيجة بمجرد الانتهاء. انظر هذا القسم لمزيد من المعلومات. | - |
upload:storage_type | تحديد نوع التخزين السحابي. القيمة الصالحة الوحيدة هي S3 (لـ AWS S3). سيأتي GCS (لتخزين السحابة على Google) قريبًا. | - |
upload:storage_url | عنوان URL لدلو التخزين. | - |
يعد استخدام هذه المعلمات أمرًا واضحًا ومباشرًا ، حيث يمكنك تمريرها باستخدام حمولة الطلب. أدناه يمكنك العثور على أمثلة رمز في بيثون.
للبساطة ، يمكنك استخدام ساعي البريد لتقديم طلبات الزحف. قم بتنزيل مجموعة Postman هذه لتجربة جميع نقاط نهاية الزاحف على الويب. إليك برنامج تعليمي فيديو خطوة بخطوة يمكنك متابعته:
كيفية زحف موقع الويب: دليل خطوة بخطوة
لتقديم طلبات HTTP في Python ، سنستخدم مكتبة الطلبات. تثبيته عن طريق إدخال ما يلي في المحطة الخاصة بك:
pip install requests
للتعامل مع نتائج HTML ، سنستخدم مكتبة BeautifulSoup4 لتحليل النتائج وجعلها أكثر قابلية للقراءة. هذه الخطوة اختيارية ، ولكن يمكنك تثبيت هذه المكتبة مع:
pip install BeautifulSoup4
في المثال التالي ، نستخدم معلمة sitemap
لإنشاء وظيفة تزحف إلى الصفحة الرئيسية للأمازون وتحصل على قائمة عناوين URL الموجودة في صفحة البداية. مع تعيين معلمات crawl
process
على “.*”
تستخدم هاتان المعلمتان تعبيرات منتظمة (regex) لتحديد عناوين URL التي ينبغي زحفها ومعالجتها. تأكد من زيارة وثائقنا لمزيد من التفاصيل والموارد المفيدة.
لا نحتاج إلى تضمين المعلمة source
لأننا لا ننشرف المحتوى من عناوين URL حتى الآن. باستخدام وحدة json
، نكتب البيانات في ملف .json ، وبعد ذلك ، مع وحدة pprint
، نطبع المحتوى المهيكل. دعونا نرى المثال:
import requests , json
from pprint import pprint
# Set the content type to JSON.
headers = { "Content-Type" : "application/json" }
# Crawl all URLs inside the target URL.
payload = {
"url" : "https://www.amazon.com/" ,
"filters" : {
"crawl" : [ ".*" ],
"process" : [ ".*" ],
"max_depth" : 1
},
"scrape_params" : {
"user_agent_type" : "desktop" ,
},
"output" : {
"type_" : "sitemap"
}
}
# Create a job and store the JSON response.
response = requests . request (
'POST' ,
'https://ect.oxylabs.io/v1/jobs' ,
auth = ( 'USERNAME' , 'PASSWORD' ), # Your credentials go here.
headers = headers ,
json = payload ,
)
# Write the decoded JSON response to a .json file.
with open ( 'job_sitemap.json' , 'w' ) as f :
json . dump ( response . json (), f )
# Print the decoded JSON response.
pprint ( response . json ())
اعتمادًا على حجم الطلب ، قد تستغرق العملية بعض الوقت. يمكنك التأكد من الانتهاء من المهمة من خلال التحقق من معلومات الوظيفة . عند الانتهاء من ذلك ، أرسل طلبًا آخر إلى نقطة نهاية Sitemap https://ect.oxylabs.io/v1/jobs/{id}/sitemap
لإرجاع قائمة عناوين URL. على سبيل المثال:
import requests , json
from pprint import pprint
# Store the JSON response containing URLs (sitemap).
sitemap = requests . request (
'GET' ,
'https://ect.oxylabs.io/v1/jobs/{id}/sitemap' , # Replace {id] with the job ID.
auth = ( 'USERNAME' , 'PASSWORD' ), # Your credentials go here.
)
# Write the decoded JSON response to a .json file.
with open ( 'sitemap.json' , 'w' ) as f :
json . dump ( sitemap . json (), f )
# Print the decoded JSON response.
pprint ( sitemap . json ())
للحصول على محتوى محلل ، استخدم المعلمة parsed
. باستخدام المثال أدناه ، يمكننا زحف جميع عناوين URL الموجودة على صفحة Amazon هذه ثم تحليل محتوى كل عنوان URL. هذه المرة ، نحن نستخدم مصدر amazon
حيث نقوم بتخليص المحتوى من صفحة Amazon المحددة. لذلك ، دعونا نرى كل هذا وضعت في بيثون:
import requests , json
from pprint import pprint
# Set the content type to JSON.
headers = { "Content-Type" : "application/json" }
# Parse content from the URLs found in the target URL.
payload = {
"url" : "https://www.amazon.com/s?i=electronics-intl-ship&bbn=16225009011&rh=n%3A502394%2Cn%3A281052&dc&qid"
"=1679564333&rnid=502394&ref=sr_pg_1" ,
"filters" : {
"crawl" : [ ".*" ],
"process" : [ ".*" ],
"max_depth" : 1
},
"scrape_params" : {
"source" : "amazon" ,
"user_agent_type" : "desktop"
},
"output" : {
"type_" : "parsed"
}
}
# Create a job and store the JSON response.
response = requests . request (
'POST' ,
'https://ect.oxylabs.io/v1/jobs' ,
auth = ( 'USERNAME' , 'PASSWORD' ), # Your credentials go here.
headers = headers ,
json = payload ,
)
# Write the decoded JSON response to a .json file.
with open ( 'job_parsed.json' , 'w' ) as f :
json . dump ( response . json (), f )
# Print the decoded JSON response.
pprint ( response . json ())
لاحظ أنه إذا كنت ترغب في استخدام معلمة geo_location
عند إلغاء صفحات Amazon ، فيجب عليك تعيين قيمتها على رمز zip/postal الخاص بالموقع المفضل. لمزيد من المعلومات ، يرجى زيارة هذه الصفحة في وثائقنا.
بمجرد اكتمال المهمة ، يمكنك التحقق من عدد القطع التي تم إنشاؤها لطلبك ثم تنزيل المحتوى من كل قطعة مع نقطة النهاية هذه: https://ect.oxylabs.io/v1/jobs/{id}/aggregate/{chunk}
. على سبيل المثال ، مع مقتطف الكود التالي ، نقوم بطباعة الجزء الأول:
import requests , json
from pprint import pprint
# Store the JSON response containing parsed results.
parsed_results = requests . request (
'GET' ,
'https://ect.oxylabs.io/v1/jobs/{id}/aggregate/1' , # Replace {id] with the job ID.
auth = ( 'USERNAME' , 'PASSWORD' ), # Your credentials go here.
)
# Write the decoded JSON response to a .json file.
with open ( 'parsed_results_1.json' , 'w' ) as f :
json . dump ( parsed_results . json (), f )
# Print the decoded JSON response.
pprint ( parsed_results . json ())
لا يختلف الرمز للحصول على نتائج HTML كثيرًا عن الكود في القسم السابق. الفرق الوحيد هو أننا قمنا بتعيين المعلمة type_
على html
. لنرى عينة الكود:
import requests , json
from pprint import pprint
# Set the content type to JSON.
headers = { "Content-Type" : "application/json" }
# Index HTML results of URLs found in the target URL.
payload = {
"url" : "https://www.amazon.com/s?i=electronics-intl-ship&bbn=16225009011&rh=n%3A502394%2Cn%3A281052&dc&qid"
"=1679564333&rnid=502394&ref=sr_pg_1" ,
"filters" : {
"crawl" : [ ".*" ],
"process" : [ ".*" ],
"max_depth" : 1
},
"scrape_params" : {
"source" : "universal" ,
"user_agent_type" : "desktop"
},
"output" : {
"type_" : "html"
}
}
# Create a job and store the JSON response.
response = requests . request (
'POST' ,
'https://ect.oxylabs.io/v1/jobs' ,
auth = ( 'USERNAME' , 'PASSWORD' ), # Your credentials go here
headers = headers ,
json = payload ,
)
# Write the decoded JSON response to a .json file.
with open ( 'job_html.json' , 'w' ) as f :
json . dump ( response . json (), f )
# Print the decoded JSON response.
pprint ( response . json ())
مرة أخرى ، ستحتاج إلى تقديم طلب لاسترداد كل جزء من النتيجة. سنستخدم مكتبة BeautifulSoup4 لتحليل HTML ، ولكن هذه الخطوة اختيارية. ثم نكتب المحتوى المحسّن إلى ملف .html . مثال الكود أدناه ينزل المحتوى من الجزء الأول:
import requests
from bs4 import BeautifulSoup
# Store the JSON response containing HTML results.
html_response = requests . request (
'GET' ,
'https://ect.oxylabs.io/v1/jobs/{id}/aggregate/1' , # Replace {id] with the job ID.
auth = ( 'USERNAME' , 'PASSWORD' ), # Your credentials go here.
)
# Parse the HTML content.
soup = BeautifulSoup ( html_response . content , 'html.parser' )
html_results = soup . prettify ()
# Write the HTML results to an .html file.
with open ( 'html_results.html' , 'w' ) as f :
f . write ( html_results )
# Print the HTML results.
print ( html_results )
يمكنك تعديل ملفات التعليمات البرمجية حسب الحاجة لكل متطلباتك.
غطى هذا البرنامج التعليمي الجوانب الأساسية لاستخدام زاحف الويب. نوصي بالنظر إلى وثائقنا لمزيد من المعلومات حول استخدام نقاط النهاية ومعلمات الاستعلام. في حال كان لديك أي أسئلة ، يمكنك دائمًا الاتصال بنا على [email protected] أو عبر الدردشة المباشرة على موقعنا.