كيفية بناء زاحف ويب أساسي لسحب المعلومات من موقع ويب

كيفية بناء زاحف ويب أساسي لسحب المعلومات من موقع ويب

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





كتابة برامج زحف الويب هذه أسهل مما تعتقد. تمتلك Python مكتبة رائعة لكتابة البرامج النصية التي تستخرج المعلومات من مواقع الويب. لنلقِ نظرة على كيفية إنشاء زاحف ويب باستخدام Scrapy.





تركيب سكرابى

سكرابى هي مكتبة Python تم إنشاؤها لتتخلص من الويب وبناء برامج زحف الويب. إنه سريع وبسيط ويمكنه التنقل عبر صفحات ويب متعددة دون بذل الكثير من الجهد.





يتوفر Scrapy من خلال مكتبة Pip Installation Python (PIP) ، وهنا تحديث كيفية تثبيت PIP على أنظمة التشغيل Windows و Mac و Linux .

يُفضل استخدام بيئة Python الافتراضية لأنها تسمح لك بتثبيت Scrapy في دليل ظاهري يترك ملفات نظامك بمفردها. توصي وثائق Scrapy بالقيام بذلك للحصول على أفضل النتائج.



إنشاء دليل وتهيئة بيئة افتراضية.

هل يمكنك كسب المال من لعب ألعاب الفيديو
mkdir crawler
cd crawler
virtualenv venv
. venv/bin/activate

يمكنك الآن تثبيت Scrapy في هذا الدليل باستخدام أمر PIP.





pip install scrapy

فحص سريع للتأكد من تثبيت Scrapy بشكل صحيح

scrapy
# prints
Scrapy 1.4.0 - no active project
Usage:
scrapy [options] [args]
Available commands:
bench Run quick benchmark test
fetch Fetch a URL using the Scrapy downloader
genspider Generate new spider using pre-defined templates
runspider Run a self-contained spider (without creating a project)
...

كيفية بناء زاحف الويب

الآن بعد أن أصبحت البيئة جاهزة ، يمكنك البدء في إنشاء زاحف الويب. دعنا نتخلص من بعض المعلومات من صفحة ويكيبيديا حول البطاريات: https://en.wikipedia.org/wiki/Battery_(electricity) .





الخطوة الأولى لكتابة الزاحف هي تحديد فئة Python التي تمتد من سكرابى العنكبوت . يمنحك هذا الوصول إلى جميع الوظائف والميزات في Scrapy. دعنا نسمي هذا الفصل العنكبوت 1 .

يحتاج فصل العنكبوت إلى بعض المعلومات:

  • إلى اسم للتعرف على العنكبوت
  • إلى start_urls متغير يحتوي على قائمة بعناوين URL للزحف منها (سيكون عنوان URL لـ Wikipedia هو المثال في هذا البرنامج التعليمي)
  • إلى تحليل () الطريقة المستخدمة لمعالجة صفحة الويب لاستخراج المعلومات
import scrapy
class spider1(scrapy.Spider):
name = 'Wikipedia'
start_urls = ['https://en.wikipedia.org/wiki/Battery_(electricity)']
def parse(self, response):
pass

اختبار سريع للتأكد من أن كل شيء يعمل بشكل صحيح.

scrapy runspider spider1.py
# prints
2017-11-23 09:09:21 [scrapy.utils.log] INFO: Scrapy 1.4.0 started (bot: scrapybot)
2017-11-23 09:09:21 [scrapy.utils.log] INFO: Overridden settings: {'SPIDER_LOADER_WARN_ONLY': True}
2017-11-23 09:09:21 [scrapy.middleware] INFO: Enabled extensions:
['scrapy.extensions.memusage.MemoryUsage',
'scrapy.extensions.logstats.LogStats',
...

إيقاف التسجيل

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

import logging
logging.getLogger('scrapy').setLevel(logging.WARNING)

الآن عند تشغيل البرنامج النصي مرة أخرى ، لن تتم طباعة معلومات السجل.

باستخدام Chrome Inspector

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

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

  • انتقل إلى صفحة في Chrome
  • ضع الماوس على العنصر الذي ترغب في عرضه
  • انقر بزر الماوس الأيمن واختر فحص من القائمة

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

استخراج العنوان

دعنا نجعل البرنامج النصي يقوم ببعض العمل من أجلنا ؛ زحف بسيط للحصول على نص عنوان صفحة الويب.

ابدأ البرنامج النصي بإضافة بعض التعليمات البرمجية إلى ملف تحليل () الأسلوب الذي يستخرج العنوان.

...
def parse(self, response):
print response.css('h1#firstHeading::text').extract()
...

ال استجابة تدعم الحجة طريقة تسمى CSS () التي تحدد عناصر من الصفحة باستخدام الموقع الذي تقدمه.

في هذا المثال ، العنصر هو h1.firstHeading . مضيفا

::text

إلى البرنامج النصي هو ما يمنحك محتوى النص للعنصر. وأخيرا، فإن مقتطف() طريقة إرجاع العنصر المحدد.

يؤدي تشغيل هذا البرنامج النصي في Scrapy إلى طباعة العنوان في شكل نصي.

[u'Battery (electricity)']

البحث عن الوصف

الآن بعد أن ألغينا نص العنوان ، فلنقم بالمزيد مع البرنامج النصي. سيجد الزاحف أول فقرة بعد العنوان ويستخرج هذه المعلومات.

إليك شجرة العناصر في Chrome Developer Console:

لديّ أمازون برايم ولكن لا يمكنني مشاهدة مقاطع الفيديو
div#mw-content-text>div>p

يشير السهم الأيمن (>) إلى علاقة الوالدين والطفل بين العناصر.

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

response.css('div#mw-content-text>div>p')[0]

تمامًا مثل العنوان ، يمكنك إضافة مستخرج CSS

::text

للحصول على محتوى النص للعنصر.

response.css('div#mw-content-text>div>p')[0].css('::text')

يستخدم التعبير النهائي مقتطف() للعودة القائمة. يمكنك استخدام لغة بايثون انضم() وظيفة للانضمام إلى القائمة بمجرد اكتمال الزحف.

def parse(self, response):
print ''.join(response.css('div#mw-content-text>div>p')[0].css('::text').extract())

النتيجة هي الفقرة الأولى من النص!

An electric battery is a device consisting of one or more electrochemical cells with external connections provided to power electrical devices such as flashlights, smartphones, and electric cars.[1] When a battery is supplying electric power, its positive terminal is
...

جمع بيانات JSON

يمكن لـ Scrapy استخراج المعلومات في شكل نصي ، وهو أمر مفيد. يتيح لك Scrapy أيضًا عرض البيانات JavaScript Object Notation (JSON). JSON هي طريقة رائعة لتنظيم المعلومات وتستخدم على نطاق واسع في تطوير الويب. يعمل JSON بشكل جيد مع Python أيضا.

عندما تحتاج إلى جمع البيانات مثل JSON ، يمكنك استخدام ملحق أثمر بيان مدمج في Scrapy.

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

كيف تغير اسمك الملحمي
...
def parse(self, response):
for e in response.css('div#mw-content-text>div>p'):
yield { 'para' : ''.join(e.css('::text').extract()).strip() }
...

يمكنك الآن تشغيل العنكبوت بتحديد ملف JSON الناتج:

scrapy runspider spider3.py -o joe.json

سيقوم البرنامج النصي الآن بطباعة جميع عناصر p.

[
{'para': 'An electric battery is a device consisting of one or more electrochemical cells with external connections provided to power electrical devices such as flashlights, smartphones, and electric cars.[1] When a battery is supplying electric power, its positive terminal is the cathode and its negative terminal is the anode.[2] The terminal marked negative is the source of electrons that when connected to an external circuit will flow and deliver energy to an external device. When a battery is connected to an external circuit, electrolytes are able to move as ions within, allowing the chemical reactions to be completed at the separate terminals and so deliver energy to the external circuit. It is the movement of those ions within the battery which allows current to flow out of the battery to perform work.[3] Historically the term 'battery' specifically referred to a device composed of multiple cells, however the usage has evolved additionally to include devices composed of a single cell.[4]'},
{'para': 'Primary (single-use or 'disposable') batteries are used once and discarded; the electrode materials are irreversibly changed during discharge. Common examples are the alkaline battery used for flashlights and a multitude of portable electronic devices. Secondary (rechargeable) batteries can be discharged and recharged multiple
...

كشط عناصر متعددة

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

دعنا نستخرج أفضل نتائج IMDb Box Office لعطلة نهاية الأسبوع. تم سحب هذه المعلومات من http://www.imdb.com/chart/boxoffice ، في جدول يحتوي على صفوف لكل مقياس.

ال تحليل () يمكن للطريقة استخراج أكثر من حقل واحد من الصف. باستخدام Chrome Developer Tools ، يمكنك العثور على العناصر المتداخلة داخل الجدول.

...
def parse(self, response):
for e in response.css('div#boxoffice>table>tbody>tr'):
yield {
'title': ''.join(e.css('td.titleColumn>a::text').extract()).strip(),
'weekend': ''.join(e.css('td.ratingColumn')[0].css('::text').extract()).strip(),
'gross': ''.join(e.css('td.ratingColumn')[1].css('span.secondaryInfo::text').extract()).strip(),
'weeks': ''.join(e.css('td.weeksColumn::text').extract()).strip(),
'image': e.css('td.posterColumn img::attr(src)').extract_first(),
}
...

ال صورة محدد ذلك IMG هو سليل td.posterColumn . لاستخراج السمة الصحيحة ، استخدم التعبير ::attr(src).

يؤدي تشغيل العنكبوت إلى إرجاع JSON:

[
{'gross': '.8M', 'weeks': '1', 'weekend': '.8M', 'image': 'https://images-na.ssl-images-amazon.com/images/M/MV5BYWVhZjZkYTItOGIwYS00NmRkLWJlYjctMWM0ZjFmMDU4ZjEzXkEyXkFqcGdeQXVyMTMxODk2OTU@._V1_UY67_CR0,0,45,67_AL_.jpg', 'title': 'Justice League'},
{'gross': '.5M', 'weeks': '1', 'weekend': '.5M', 'image': 'https://images-na.ssl-images-amazon.com/images/M/MV5BYjFhOWY0OTgtNDkzMC00YWJkLTk1NGEtYWUxNjhmMmQ5ZjYyXkEyXkFqcGdeQXVyMjMxOTE0ODA@._V1_UX45_CR0,0,45,67_AL_.jpg', 'title': 'Wonder'},
{'gross': '7.3M', 'weeks': '3', 'weekend': '.7M', 'image': 'https://images-na.ssl-images-amazon.com/images/M/MV5BMjMyNDkzMzI1OF5BMl5BanBnXkFtZTgwODcxODg5MjI@._V1_UY67_CR0,0,45,67_AL_.jpg', 'title': 'Thor: Ragnarok'},
...
]

المزيد من برامج كاشطات الويب والبوتات

Scrapy هي مكتبة مفصلة يمكنها القيام بأي نوع من زحف الويب الذي تطلبه منه. عندما يتعلق الأمر بالعثور على معلومات في عناصر HTML ، جنبًا إلى جنب مع دعم Python ، فمن الصعب التغلب عليها. سواء كنت تبني زاحف ويب أو تتعلم عن أساسيات تجريف الويب ، فإن الحد الوحيد هو مقدار ما ترغب في تعلمه.

إذا كنت تبحث عن المزيد من الطرق لبناء برامج الزحف أو الروبوتات ، فيمكنك تجربتها إنشاء روبوتات Twitter و Instagram باستخدام Python . يمكن أن تبني Python بعض الأشياء المدهشة في تطوير الويب ، لذلك يجدر تجاوز برامج زحف الويب عند استكشاف هذه اللغة.

يشارك يشارك سقسقة بريد الالكتروني 15 من أوامر موجه أوامر Windows (CMD) يجب أن تعرفها

موجه الأوامر لا يزال أداة Windows قوية. فيما يلي أوامر CMD الأكثر فائدة التي يحتاج كل مستخدم Windows إلى معرفتها.

اقرأ التالي
مواضيع ذات صلة
  • برمجة
  • أدوات مشرفي المواقع
  • برمجة
  • بايثون
  • دروس الترميز
  • برامج زحف الويب
نبذة عن الكاتب أنتوني جرانت(40 مقالة منشورة)

أنتوني غرانت كاتب مستقل يغطي البرمجة والبرمجيات. إنه متخصص في علوم الكمبيوتر ويشتغل في البرمجة و Excel والبرمجيات والتكنولوجيا.

المزيد من Anthony Grant

اشترك في نشرتنا الإخبارية

انضم إلى النشرة الإخبارية لدينا للحصول على نصائح تقنية ومراجعات وكتب إلكترونية مجانية وصفقات حصرية!

انقر هنا للاشتراك