تعلم كيفية كشط البيانات المالية باستخدام Python
نشرت: 2019-04-26سوق الأسهم عبارة عن قاعدة بيانات ضخمة بها ملايين الإدخالات التي يتم تحديثها كل ثانية. في حين أن هناك العديد من الشركات التي تقدم البيانات المالية للشركات ، فعادة ما يتم ذلك من خلال واجهة برمجة التطبيقات (واجهة برمجة التطبيقات). وكما قد تكون خمنت ، فإن واجهات برمجة التطبيقات هذه ليست مجانية أبدًا. Yahoo Finance هو مصدر موثوق لبيانات سوق الأسهم ولديه واجهة برمجة تطبيقات مدفوعة. سنوجهك في عملية خطوة بخطوة حول كيفية استخراج بيانات Yahoo Finance باستخدام Python.
لماذا الزحف إلى البيانات من Yahoo Finance؟
إذا كنت تحتاج إلى بيانات مالية مجانية ونظيفة من مصدر موثوق ، فإن Yahoo Finance هو أفضل رهان لك. تم إنشاء صفحات الويب الخاصة بالملف الشخصي للشركة في بنية موحدة ، مما يجعل عملية تجريف بيثون الويب أمرًا سهلاً. إذا قمت بكتابة نص برمجي لتتبع ارتباطات البيانات من الصفحة المالية لشركة Microsoft ، فيمكن أيضًا استخدام البرنامج النصي نفسه لتتبع ارتباطات البيانات من الصفحة المالية لشركة Apple.
كيف تكشط الويب بيانات التمويل باستخدام بايثون؟
للتثبيت والبدء ، يمكنك الرجوع إلى الخطوات الأساسية من هذه المقالة حول جمع البيانات بيثون ، حيث ناقشنا كيفية الزحف إلى البيانات من بوابة حجز الفنادق الرائدة. بمجرد تثبيت جميع التبعيات مع محرر الأكواد Atom ، فلنبدأ بإلغاء Yahoo Finance باستخدام Python.
1. ابدأ بكود تجريف بيثون
بمجرد اكتمال مراحل التثبيت والإعداد ، يمكننا الانتقال مباشرة إلى الكود وبدء Yahoo Finance Scraping. يتم تقديم الكود أدناه ويمكن تشغيله باستخدام أمر Python فقط.

يمكنك تشغيل الكود بالطريقة الموضحة أعلاه. عندما يُطلب منك ، فقط أدخل عنوان URL للشركة التي تريد التحقق من ملخصها المالي. لقد استخدمنا الارتباط الخاص بـ Microsoft.
[لغة الكود = "بيثون"]
#! / usr / bin / python
# - * - الترميز: utf-8 - * -
طلب استيراد urllib
استيراد urllib.parse
استيراد خطأ urllib
من bs4 استيراد BeautifulSoup
استيراد ssl
استيراد json
استيراد ast
استيراد نظام التشغيل
من طلب استيراد urllib.request ، urlopen
# لتجاهل أخطاء شهادة SSL
ctx = ssl.create_default_context ()
ctx.check_hostname = خطأ
ctx.verify_mode = ssl.CERT_NONE
# المدخلات من المستخدم
url = input ("أدخل عنوان URL الخاص بشركة Yahoo Finance-")
# جعل موقع الويب يعتقد أنك تصل إليه باستخدام متصفح Mozilla
req = الطلب (url ، headers = {'User-Agent': 'Mozilla / 5.0'})
صفحة الويب = urlopen (req) .read ()
# إنشاء كائن BeautifulSoup لصفحة HTML لسهولة استخراج البيانات.
soup = BeautifulSoup (صفحة الويب ، "html.parser")
html = soup.prettify ('utf-8')
company_json = {}
تفاصيل أخرى = {}
لامتداد في soup.findAll ("سبان" ،
attrs = {'class': 'Trsdu (0.3s) Trsdu (0.3s) Fw (b) Fz (36px) Mb (-4px) D (b)'
}):
company_json ['PRESENT_VALUE'] = span.text.strip ()
لـ div في soup.findAll ('div'، attrs = {'class': 'D (ib) Va (t)'}):
للامتداد في div.findAll ('span'، recursive = False):
company_json ['PRESENT_GROWTH'] = span.text.strip ()
لـ td في soup.findAll ('td'، attrs = {'data-test': 'PREV_CLOSE-value'}):
للامتداد في td.findAll ('span'، recursive = False):
other_details ['PREV_CLOSE'] = span.text.strip ()
لـ td في soup.findAll ('td'، attrs = {'data-test': 'OPEN-value'}):
للامتداد في td.findAll ('span'، recursive = False):
other_details ['OPEN'] = span.text.strip ()
لـ td في soup.findAll ('td'، attrs = {'data-test': 'BID-value'}):
للامتداد في td.findAll ('span'، recursive = False):
other_details ['BID'] = span.text.strip ()
لـ td في soup.findAll ('td'، attrs = {'data-test': 'ASK-value'}):
للامتداد في td.findAll ('span'، recursive = False):
other_details ['ASK'] = span.text.strip ()
لـ td في soup.findAll ('td'، attrs = {'data-test': 'DAYS_RANGE-value'}):
للامتداد في td.findAll ('span'، recursive = False):
other_details ['DAYS_RANGE'] = span.text.strip ()
ل td في soup.findAll ('td'،
attrs = {'data-test': 'FIFTY_TWO_WK_RANGE-value'}):
للامتداد في td.findAll ('span'، recursive = False):
other_details ['FIFTY_TWO_WK_RANGE'] = span.text.strip ()
لـ td في soup.findAll ('td'، attrs = {'data-test': 'TD_VOLUME-value'}):
للامتداد في td.findAll ('span'، recursive = False):
other_details ['TD_VOLUME'] = span.text.strip ()
ل td في soup.findAll ('td'،
attrs = {'data-test': 'AVERAGE_VOLUME_3MONTH-value'
}):
للامتداد في td.findAll ('span'، recursive = False):
other_details ['AVERAGE_VOLUME_3MONTH'] = span.text.strip ()
لـ td في soup.findAll ('td'، attrs = {'data-test': 'MARKET_CAP-value'}):
للامتداد في td.findAll ('span'، recursive = False):
other_details ['MARKET_CAP'] = span.text.strip ()
لـ td في soup.findAll ('td'، attrs = {'data-test': 'BETA_3Y-value'}):
للامتداد في td.findAll ('span'، recursive = False):
other_details ['BETA_3Y'] = span.text.strip ()
لـ td في soup.findAll ('td'، attrs = {'data-test': 'PE_RATIO-value'}):
للامتداد في td.findAll ('span'، recursive = False):
other_details ['PE_RATIO'] = span.text.strip ()
لـ td في soup.findAll ('td'، attrs = {'data-test': 'EPS_RATIO-value'}):
للامتداد في td.findAll ('span'، recursive = False):
other_details ['EPS_RATIO'] = span.text.strip ()
لـ td في soup.findAll ('td'، attrs = {'data-test': 'EARNINGS_DATE-value'
}):
other_details ['EARNINGS_DATE'] = []
للامتداد في td.findAll ('span'، recursive = False):
other_details ['EARNINGS_DATE']. إلحاق (span.text.strip ())
ل td في soup.findAll ('td'،
attrs = {'data-test': 'DIVIDEND_AND_YIELD-value'}):
other_details ['DIVIDEND_AND_YIELD'] = td.text.strip ()
ل td في soup.findAll ('td'،
attrs = {'data-test': 'EX_DIVIDEND_DATE-value'}):
للامتداد في td.findAll ('span'، recursive = False):
other_details ['EX_DIVIDEND_DATE'] = span.text.strip ()
ل td في soup.findAll ('td'،
attrs = {'data-test': 'ONE_YEAR_TARGET_PRICE-value'
}):
للامتداد في td.findAll ('span'، recursive = False):
other_details ['ONE_YEAR_TARGET_PRICE'] = span.text.strip ()
company_json ['OTHER_DETAILS'] = تفاصيل_ أخرى
مع open ("data.json"، "w") كملف outfile:
json.dump (company_json ، outfile ، مسافة بادئة = 4)
طباعة company_json
مع open ('output_file.html'، 'wb') كملف:
file.write (html)
طباعة '———- اكتمل استخراج البيانات. افحص ملف json .———- '

[/الشفرة]
بمجرد تشغيل الرمز وإدخال عنوان URL للشركة ، سترى json مطبوعًا على جهازك. سيتم أيضًا حفظ ملف json هذا في ملف باسم "data.json" في مجلدك. بالنسبة إلى Microsoft ، حصلنا على JSON التالي.
[لغة الكود = "بيثون"]
{
"PRESENT_GROWTH": "+1.31 (+ 0.67٪)" ،
"PRESENT_VALUE": "197.00" ،
"PREV_CLOSE": "195.69" ،
"فتح": "196.45" ،
"BID": "196.89 × 900" ،
"اسأل": "197.00 × 1400" ،
"TD_VOLUME": "18،526،644" ،
"AVERAGE_VOLUME_3MONTH": "29962.082" ،
"MARKET_CAP": "928.91B" ،
"BETA_3Y": "0.91" ،
"PE_RATIO": "16.25" ،
"EPS_RATIO": "12.12" ،
"EARNINGS_DATE": [
"30 نيسان (أبريل) 2019"
] ،
"DIVIDEND_AND_YIELD": "2.92 (1.50٪)" ،
"EX_DIVIDEND_DATE": "2019-02-08" ،
"ONE_YEAR_TARGET_PRICE": "190.94"
}
[/الشفرة]
بالنسبة لشركة Apple ، التي تكبدت خسائر متعددة مؤخرًا ، بدا JSON هكذا.
[لغة الكود = "بيثون"]
{
"PRESENT_VALUE": "198.87" ،
"PRESENT_GROWTH": "-0.08 (-0.04٪)" ،
"تفاصيل أخرى": {
"PREV_CLOSE": "198.95" ،
"فتح": "199.20" ،
"BID": "198.91 × 800" ،
"اسأل": "198.99 × 1000" ،
"TD_VOLUME": "27760668" ،
"AVERAGE_VOLUME_3MONTH": "28641896" ،
"MARKET_CAP": "937.728B" ،
"BETA_3Y": "0.91" ،
"PE_RATIO": "16.41" ،
"EPS_RATIO": "12.12" ،
"EARNINGS_DATE": [
"30 أبريل 2019"
] ،
"DIVIDEND_AND_YIELD": "2.92 (1.50٪)" ،
"EX_DIVIDEND_DATE": "2019-02-08" ،
"ONE_YEAR_TARGET_PRICE": "193.12"
}
}
[/الشفرة]
يمكنك أن تفعل الشيء نفسه مع أي عدد من الشركات التي تريدها وبقدر ما تريد البقاء على اطلاع دائم.
2. شرح رمز الزاحف
مثل أكواد تجريف الويب السابقة ، في هذا أيضًا ، حصلنا أولاً على ملف HTML بأكمله. من ذلك ، حددنا العلامات المحددة (مع فئات محددة) التي تحتوي على البيانات التي نحتاجها. تم تنفيذ هذه الخطوة يدويًا لصفحة تفاصيل شركة واحدة. بمجرد تحديد العلامات المحددة والفئات الخاصة بها ، استخدمنا حساءًا جميلًا لإخراج تلك العلامات ، باستخدام الكود الخاص بنا.
ثم من كل من هذه العلامات ، قمنا بنسخ البيانات الضرورية إلى متغير يسمى company_json. هذا هو ملف json الذي كتبناه في النهاية في ملف من نوع JSON يسمى data.json. يمكنك أن ترى أننا قمنا أيضًا بحفظ HTML المقطوع في ملف يسمى output_file.html في ذاكرتك المحلية. يتم ذلك حتى تتمكن من تحليل صفحة HTML بنفسك والتوصل إلى تقنيات أخرى لاستخراج البيانات من لغة python للزحف إلى مزيد من البيانات.
3. بعض نقاط البيانات الهامة التي قمنا بالتقاطها
- PREV_CLOSE: يشير إلى سعر إغلاق السهم في اليوم السابق للتداول. تشير قيمة اليوم السابق للسهم فقط إلى سعر الإغلاق الأخير في اليوم الذي كان فيه سوق الأسهم مفتوحًا (وليس أيام العطل).
- OPEN: سعر الافتتاح المشار إليه أيضًا باسم Open باختصار ، هو سعر البداية للسهم في يوم تداول. على سبيل المثال ، سيكون سعر الافتتاح لأي سوق للأوراق المالية في بورصة نيويورك (NYSE) هو سعره في الساعة 9:30 صباحًا بالتوقيت الشرقي.
- العرض والطلب: كلا السعرين عبارة عن تسعير لحصة واحدة من الأسهم. يشير العطاء إلى السعر الذي يرغب المشترون في دفعه مقابل ذلك ، في حين أن السؤال هو ما يرغب البائعون في بيعه به. يشير المضاعف إلى عدد الأسهم المعلقة بالتداول بأسعارها الخاصة.
- TD_VOLUME: إنه ببساطة عدد الأسهم التي تم تداولها خلال اليوم.
- PE_RATIO: ربما يكون العامل الوحيد الأكثر أهمية الذي ينظر فيه المستثمرون ، يتم حسابه بقسمة سعر السوق الحالي لسهم الشركة على ربحية السهم للشركة. ببساطة ، هو مبلغ المال الذي يكون الشخص على استعداد لدفعه مقابل كل روبية تساوي أرباح الشركة.
السبب في شرحنا لبعض نقاط البيانات المهمة هو أننا أردنا منك أن تعرف إلى أي مدى يمكنك الغوص في البيانات المالية لشركة ما ، فقط عن طريق استخراج البيانات من صفحة Yahoo Finance الخاصة بها.
ما هي البيانات التي يمكنك الزحف إليها من Yahoo Finance؟
ستتمكن من الزحف إلى نقاط بيانات مختلفة باستخدام مكشطة Python هذه. القيمة الحالية ونسبة النمو أو الانخفاض الحالية ذات أهمية قصوى. عند النظر إلى نقاط البيانات الأخرى معًا ، فإنها تقدم صورة أفضل وتساعد المرء على تحديد ما إذا كان الاستثمار في أسهم الشركة فكرة جيدة أم لا. ومع ذلك ، فإن النظر إلى لقطة من البيانات قد لا يكون فعالًا للغاية. قد يؤدي تجريف البيانات على فترات منتظمة واستخدام مجموعة بيانات كبيرة للتنبؤ بالأسعار المستقبلية للأسهم إلى إثبات فائدة أكبر على المدى الطويل.
ما هي البيانات المالية الأخرى التي يمكنك الزحف إليها؟
البيانات المالية التي قمنا بكشطها مأخوذة من صفحة ملخص لشركة في Yahoo Finance. تمتلك كل شركة أيضًا صفحة مخطط ، حيث يمكنك الاطلاع على بيانات الأسهم لمدة تصل إلى خمس سنوات. على الرغم من أن البيانات ليست منظمة تمامًا ، إلا أن القدرة على الزحف إليها قد تمنحك فكرة جيدة جدًا عن الأداء التاريخي لأسهم الشركة.
تمنحك صفحة الإحصائيات أكثر من ثلاثين نقطة بيانات مختلفة ، بالإضافة إلى النقاط التي تم التقاطها. هذه في تنسيق منظم ويمكن كشطها باستخدام رمز مشابه لما قدمناه.
تحتوي البيانات التاريخية على بيانات من صفحة المخطط ، ولكن بتنسيق مشابه لملف CSV - يمكنك بسهولة استخراج البيانات وتخزينها في ملف CSV. قد تمنحك الصفحات الأخرى مثل الملف الشخصي والبيانات المالية والتحليل والخيارات والمالكين والاستدامة تقديرًا جيدًا لكيفية أداء أسهم الشركة مقارنة بمنافسيها.
الحالات المستخدمة لبيانات Yahoo Finance
يمكنك استخدام البيانات التاريخية للتنبؤ بأسعار الأسهم ، أو يمكنك إنشاء تطبيق يستخدم البيانات المحدثة بانتظام من محرك الكشط الخاص بك لتوفير التحديثات للمستخدمين. يمكنك أن توصي متى يجب على المرء بيع أسهمه ، أو متى يجب عليه شراء المزيد - الاحتمالات لا حصر لها!
في حال كان لديك فريق صغير ولا يمكنك تحديد كيفية البدء في تجريف الويب ، يمكنك الحصول على مساعدة من فريق تجريف ويب ملتزم وذو خبرة مثل PromptCloud. تجعل لوحة التحكم التي تجمع متطلبات جمع بيانات الويب الخاصة بنا تقديم المتطلبات والحصول على عرض أسعار وأخيراً الحصول على البيانات في تنسيق التوصيل والتشغيل عملية بسيطة ومباشرة.
هل تحتاج إلى مساعدة في استخراج بيانات الويب؟
احصل على بيانات نظيفة وجاهزة للاستخدام من مواقع الويب لتطبيقات الأعمال من خلال خدمات تجريف الويب الخاصة بنا.
أُووبس! لم نتمكن من تحديد النموذج الخاص بك.
إخلاء المسؤولية: الكود المقدم في هذا البرنامج التعليمي هو فقط لأغراض التعلم. نحن لسنا مسؤولين عن كيفية استخدامه ولا نتحمل أي مسؤولية عن أي استخدام ضار لشفرة المصدر.
