البرمجة

Python Web Scraping Tutorial: Extracting Stock Price

بدايةً، يبدو أن المشكلة تكمن في طريقة قراءتك لمحتوى الصفحة، حيث تقوم بإستخدام urllib.urlopen للوصول إلى صفحة الويب. في Python 3، تم إزالة هذه الدالة واستبدالها بـ urllib.request.urlopen. ومن المهم أيضًا أن تقوم بقراءة محتوى الصفحة بشكل صحيح.

هذا الكود الذي تستخدمه:

python
import urllib import re htmltext = urllib.urlopen("https://www.google.com/finance?q=AAPL") regex = '(.+?)' pattern = re.compile(regex) results = re.findall(pattern,htmltext) results

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

python
import urllib.request import re htmltext = urllib.request.urlopen("https://www.google.com/finance?q=AAPL").read().decode('utf-8') regex = '(.+?)' pattern = re.compile(regex) results = re.findall(pattern, htmltext) results

في هذا الكود، نستخدم urllib.request.urlopen لفتح الرابط وقراءة محتواه، ثم نقوم بترجمة المحتوى المقروء بواسطة .read() من تنسيق bytes إلى نص (باستخدام .decode('utf-8')) لضمان أن يكون بإمكاننا استخدامه بسهولة مع re.findall.

بعد ذلك، يتم استخدام النمط المعرف مسبقًا (pattern) للبحث عن النص المطابق في المحتوى، وتخزين النتائج في results.

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

المزيد من المعلومات

بالطبع، ها هو المقال المكمّل:


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

الخطأ الذي واجهته هو نتيجة لتحديد المتغير htmltext كنص ولكنه في الواقع كان يحتوي على كائن من نوع bytes. لذا، عندما قمت بتطبيق النمط المعرّف مسبقًا (pattern) عليه، حدث خطأ بسبب عدم تطابق أنواع البيانات.

بعد تطبيق التعديلات، أولاً، استخدمنا urllib.request.urlopen بدلاً من urllib.urlopen لضمان توافق الكود مع Python 3. ثم قمنا بإضافة .read() للقراءة الصحيحة لمحتوى الصفحة، ومن ثم استخدمنا .decode('utf-8') لتحويل النص إلى ترميز UTF-8 للعمل بشكل صحيح مع re.findall.

يعتمد النمط المحدد مسبقًا (regex) على تنسيق صفحة Google Finance لعرض سعر السهم لشركة أبل (AAPL). يبدأ النمط بفتح علامة span التي تحمل معرفًا محددًا ref_[^.]*_l، ويأتي بعدها أي نص متغير (.+?) وينتهي بإغلاق علامة span. يتم استخدام هذا النمط للتقاط السعر المحدد داخل العلامة span.

بعد تطبيق النمط على النص المستخرج من صفحة Google Finance، ستقوم re.findall بالبحث عن جميع الفترات المتطابقة مع النمط وإرجاعها في قائمة results. وبناءً على الكود المقدم، يجب أن تحتوي results على القيمة المطلوبة.

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

مقالات ذات صلة

زر الذهاب إلى الأعلى
إغلاق

أنت تستخدم إضافة Adblock

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