كيف تتخلص من المواقع باستخدام Python و BeautifulSoup

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

تحتاج إلى تجريف الويب.

تقوم ميزة "تجريف الويب" تلقائيًا باستخراج البيانات وتقديمها بتنسيق يمكنك فهمه بسهولة. في هذا البرنامج التعليمي ، سوف نركز على تطبيقاته في السوق المالية ، ولكن يمكن استخدام تجريف الويب في مجموعة متنوعة من المواقف.

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

ابدء

سنستخدم Python كلغة تجريدنا ، إلى جانب مكتبة بسيطة وقوية ، BeautifulSoup.

  • بالنسبة لمستخدمي Mac ، تم تثبيت Python مسبقًا في نظام التشغيل X. افتح "المحطة الطرفية" واكتب python --version. يجب أن تشاهد إصدار python الخاص بك هو 2.7.x.
  • لمستخدمي Windows ، الرجاء تثبيت Python من خلال الموقع الرسمي.

بعد ذلك ، نحتاج إلى الحصول على مكتبة BeautifulSoup باستخدام pip ، وهي أداة لإدارة الحزم في Python.

في المحطة ، اكتب:

easy_install pip
نقطة تثبيت BeautifulSoup4

ملاحظة: إذا فشلت في تنفيذ سطر الأوامر أعلاه ، فحاول إضافة sudo أمام كل سطر.

أساسيات

قبل البدء في القفز إلى الشفرة ، دعونا نفهم أساسيات HTML وبعض قواعد التجريف.

علامات HTML
إذا فهمت بالفعل علامات HTML ، فلا تتردد في تخطي هذا الجزء.



    <رئيس>
    
    
        

التجريف الأول         

مرحبًا World

    

هذا هو بناء الجملة الأساسي لصفحة ويب HTML. يقدم كل كتلة داخل صفحة الويب:
1. : يجب أن تبدأ مستندات HTML بإعلان النوع.
2. مستند HTML موجود بين و .
3. التعريف الفوقية وإعلان البرنامج النصي لمستند HTML يقع بين و .
4. الجزء المرئي من مستند HTML هو بين العلامات و .
5. يتم تعريف عناوين العناوين بعلامات

إلى

.
6. يتم تعريف الفقرات بعلامة

.

تشمل العلامات المفيدة الأخرى للارتباطات التشعبية ،

للجداول ، لصفوف الجدول ، و
لأعمدة الجدول.

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

لمزيد من المعلومات حول علامات HTML والمعرف والفئة ، يرجى الرجوع إلى W3Schools Tutorials.

كشط القواعد

  1. يجب عليك مراجعة الشروط والأحكام الخاصة بموقع الويب قبل أن تتخلص منه. كن حذرا في قراءة البيانات حول الاستخدام القانوني للبيانات. عادة ، لا ينبغي أن تستخدم البيانات التي تتخلص منها لأغراض تجارية.
  2. لا تطلب بيانات من موقع الويب بقوة شديدة مع برنامجك (المعروف أيضًا باسم البريد العشوائي) ، لأن هذا قد يكسر موقع الويب. تأكد من أن برنامجك يتصرف بطريقة معقولة (أي أنه يتصرف كإنسان). طلب واحد لصفحة ويب واحدة في الثانية هو ممارسة جيدة.
  3. قد يتغير تخطيط موقع الويب من وقت لآخر ، لذا تأكد من زيارة الموقع وإعادة كتابة الكود حسب الحاجة

تفتيش الصفحة

لنأخذ صفحة واحدة من موقع Bloomberg Quote كمثال.

كشخص يتابع سوق الأسهم ، نود الحصول على اسم المؤشر (S&P 500) وسعره من هذه الصفحة. أولاً ، انقر بزر الماوس الأيمن وفتح مفتش المتصفح الخاص بك لفحص صفحة الويب.

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

من النتيجة ، يمكننا أن نرى أن السعر يقع داخل مستويات قليلة من علامات HTML ، وهو

.

وبالمثل ، إذا قمت بالتمرير والنقر فوق الاسم "S&P 500 Index" ، فسيكون ذلك داخل

و

.

نحن الآن نعرف الموقع الفريد لبياناتنا بمساعدة العلامات الصفية.

القفز الى القانون

الآن بعد أن عرفنا مكان بياناتنا ، يمكننا البدء في ترميز مكشطة الويب الخاصة بنا. افتح محرر النص الخاص بك الآن!

أولاً ، نحتاج إلى استيراد جميع المكتبات التي سنستخدمها.

# استيراد المكتبات
استيراد urllib2
من bs4 استيراد BeautifulSoup

بعد ذلك ، قم بتعريف متغير لعنوان url للصفحة.

# تحديد عنوان url
quote_page = ‘http://www.bloomberg.com/quote/SPX:IND '

بعد ذلك ، استخدم Python urllib2 للحصول على صفحة HTML الخاصة بعنوان url.

# الاستعلام عن الموقع وإرجاع html إلى "الصفحة" المتغيرة
الصفحة = urllib2.urlopen (quote_page)

أخيرًا ، قم بتحليل الصفحة بتنسيق BeautifulSoup حتى نتمكن من استخدام BeautifulSoup للعمل عليها.

# تحليل HTML باستخدام حساء جميل وتخزينها في متغير 'حساء'
soup = BeautifulSoup (صفحة ، 'html.parser')

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

تذكر الطبقات الفريدة لبياناتنا؟ يمكن لـ BeautifulSoup مساعدتنا في الوصول إلى هذه الطبقات واستخراج المحتوى باستخدام find (). في هذه الحالة ، نظرًا لأن اسم فئة HTML فريد في هذه الصفحة ، يمكننا ببساطة الاستعلام عن

.

# أخرج 
الاسم واحصل على قيمته name_box = soup.find (‘h1 '، attrs = {‘ class ’:‘ name ’})

بعد أن نحصل على العلامة ، يمكننا الحصول على البيانات عن طريق الحصول على نصها.

name = name_box.text.strip () # strip () يستخدم لإزالة البدء والزائدة
إطبع الإسم

وبالمثل ، يمكننا الحصول على السعر أيضا.

# الحصول على سعر المؤشر
price_box = soup.find (‘div’، attrs = {’class’: ’price’})
السعر = price_box.text
سعر الطباعة

عند تشغيل البرنامج ، يجب أن تكون قادرًا على رؤية أنه يطبع السعر الحالي لمؤشر S&P 500.

تصدير إلى Excel CSV

الآن وقد أصبح لدينا البيانات ، فقد حان الوقت لحفظها. يعد تنسيق Excel المفصولة بفواصل اختيارًا جيدًا. يمكن فتحه في Excel حتى تتمكن من رؤية البيانات ومعالجتها بسهولة.

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

استيراد CSV
من تاريخ ووقت الاستيراد

في الجزء السفلي من التعليمات البرمجية الخاصة بك ، أضف التعليمات البرمجية لكتابة البيانات إلى ملف CSV.

# افتح ملف CSV مع إلحاق ، لذلك لن يتم مسح البيانات القديمة
مع open ('index.csv' ، 'a') كـ csv_file:
 الكاتب = csv.writer (csv_file)
 writer.writerow ([الاسم ، السعر ، datetime.now ()])

الآن إذا قمت بتشغيل البرنامج ، فيمكنك تصدير ملف index.csv ، والذي يمكنك فتحه بعد ذلك باستخدام Excel ، حيث سترى سطرًا من البيانات.

لذلك إذا قمت بتشغيل هذا البرنامج كل يوم ، فستتمكن بسهولة من الحصول على سعر مؤشر S&P 500 دون البحث في الموقع!

المضي قدما (الاستخدامات المتقدمة)

مؤشرات متعددة
لذا فالغاء مؤشر واحد لا يكفي لك ، أليس كذلك؟ يمكننا محاولة استخراج مؤشرات متعددة في نفس الوقت.

أولاً ، قم بتعديل quote_page في صفيف من عناوين URL.

quote_page = [‘http://www.bloomberg.com/quote/SPX:IND '،‘ http://www.bloomberg.com/quote/CCMP:IND']

بعد ذلك ، نقوم بتغيير رمز استخراج البيانات إلى حلقة for ، والتي ستقوم بمعالجة عناوين URL واحدة تلو الأخرى وتخزين جميع البيانات في بيانات متغيرة في tuples.

# لحلقة
البيانات = []
من أجل pg في quote_page:
 # الاستعلام عن الموقع وإرجاع html إلى "الصفحة" المتغيرة
 الصفحة = urllib2.urlopen (pg)
# تحليل HTML باستخدام الصابون الجميل وتخزينها في متغير 'الحساء'
 soup = BeautifulSoup (صفحة ، 'html.parser')
# أخرج 
الاسم واحصل على قيمته  name_box = soup.find (‘h1 '، attrs = {‘ class ’:‘ name ’})  name = name_box.text.strip () # strip () يستخدم لإزالة البدء والزائدة
# الحصول على سعر المؤشر
 price_box = soup.find (‘div’، attrs = {’class’: ’price’})
 السعر = price_box.text
# حفظ البيانات في tuple
 بيانات.تطبيق ((الاسم ، السعر))

أيضًا ، قم بتعديل قسم الحفظ لحفظ صف البيانات حسب الصف.

# افتح ملف CSV مع إلحاق ، لذلك لن يتم مسح البيانات القديمة
مع open ('index.csv' ، 'a') كـ csv_file:
 الكاتب = csv.writer (csv_file)
 # للحلقة
 للاسم والسعر في البيانات:
 writer.writerow ([الاسم ، السعر ، datetime.now ()])

أعد تشغيل البرنامج ، ويجب أن تكون قادرًا على استخراج اثنين من المؤشرات في نفس الوقت!

تقنيات القشط المتقدمة

BeautifulSoup بسيط وكبير للتجريد عبر الإنترنت على نطاق صغير. ولكن إذا كنت مهتمًا بإلغاء البيانات على نطاق أوسع ، يجب أن تفكر في استخدام هذه البدائل الأخرى:

  1. خردة ، إطار قوي الثعبان الثعبان
  2. حاول دمج الكود الخاص بك مع بعض واجهات برمجة التطبيقات العامة. تعد كفاءة استرجاع البيانات أعلى بكثير من كشط صفحات الويب. على سبيل المثال ، ألق نظرة على Facebook Graph API ، والتي يمكن أن تساعدك في الحصول على البيانات المخفية التي لا تظهر على صفحات الويب الخاصة بـ Facebook.
  3. فكر في استخدام قاعدة بيانات خلفية مثل MySQL لتخزين بياناتك عندما تصبح كبيرة جدًا.

اعتماد طريقة الجافة

DRY تعني "لا تكرر نفسك" ، حاول أتمتة المهام اليومية مثل هذا الشخص. قد تكون بعض المشاريع الممتعة الأخرى التي يجب مراعاتها تتبع الوقت النشط لأصدقائك على Facebook (بموافقتهم بالطبع) ، أو الحصول على قائمة بالموضوعات في المنتدى وتجربة معالجة اللغة الطبيعية (وهو موضوع ساخن بالنسبة إلى الذكاء الاصطناعي الصحيح الآن)!

إذا كان لديك أي أسئلة ، فلا تتردد في ترك تعليق أدناه.

المراجع
http://www.gregreda.com/2013/03/03/web-scraping-101-with-python/
http://www.analyticsvidhya.com/blog/2015/10/beginner-guide-web-scraping-beautiful-soup-python/

نُشرت هذه المقالة في الأصل على مدونة Altitude Labs وكتبها مهندس البرمجيات ليونارد موك. Altitude Labs هي وكالة برامج متخصصة في تطبيقات React المخصصة للأجهزة المحمولة.