داده های اقتصادی خراش وب از کارخانه فارکس

ساخت وبلاگ

webscraping economic data

امروز من مقداری سوپ درست می کردم. یک سوپ زیباسوپ زیبا یک کتابخانه در پایتون برای استخراج داده ها از وب است. این درس برای من به ویژه ناخوشایند و چالش برانگیز بود. من چند شب را برای عیب یابی مسائل یکی پس از دیگری و دیگری گذراندم. حدود 1-2 هفته طول کشید تا اصول اولیه سوپ زیبا را در پایتون بیاموزم.

در ابتدا ، هنگامی که من در حال یادگیری سوپ زیبا بودم ، با خودم فکر کردم چه پروژه هایی می تواند در حوزه مالی مفید باشد. خراشیدن قیمت سهام و داده های حجم مطمئناً ارزش زمان را ندارد. این کار به راحتی با کتابخانه YFInance ، Alpha Vantage یا Pandas Data_Reader انجام می شود.

به طور مشابه ، بازدید از یک وب سایت پیش بینی آب و هوا برای خراش داده ها ، اگر فقط بتوانم به طور مستقیم به آن صفحه وب مراجعه کنم و با سهولت آن را مشاهده کنم ، ارزش افزودنی آن را ندارد.

بنابراین باید چیزی باشد که مفید ، خودکار ، صرفه جویی در وقت و ایده آل بینش باشد. بعد از فکر زیاد ، من تصمیم گرفتم که رویدادهای اقتصادی را از کارخانه فارکس خراب کنم.

ماندن در بالای روندهای اقتصادی

Forex Factory دارای یک لیست تقویم از رویدادهای اقتصادی آینده و گذشته با نقاط واقعی ، پیش بینی و داده های قبلی است. برخی از موارد متداول شامل شاخص قیمت مصرف کننده ، شاخص تولید ، نرخ فدرال ، جلسه سیاست پولی ، حقوق و دستمزد غیر مزرعه و غیره است. اینها همه شاخص های برجسته ای هستند که به ما می گویند در اقتصاد جهانی چه می گذرد. این نمونه ای از چگونگی تقویم به نظر می رسد.

web scraping forex factory

در ابتدا ، من فکر کردم که عملیات repo فدرال رزرو را خرد کنم و با بازار حباب S& P 500 ارتباط برقرار کنم. اما من تقریباً بلافاصله پس از بازدید از صفحه ، از این ایده خودداری کردم. آنها یک کار عالی برای ایجاد حجاب با اصطلاحات مالی غیر ضروری انجام داده اند. یا شاید این فقط من باشم

به هر حال ، کاری که من می خواستم انجام دهم این بود که تمام وقایع با تأثیر بالا را به همراه پیوندهای منبع مربوطه ، واقعی ، پیش بینی ، قبلی و همچنین کل نقاط داده تاریخی هر رویداد فیلتر کنم. سپس برای مصرف شخصی من آن را در هر ماه پایان صادر کنید. این هدف این پروژه است.

در این مقاله ، من سعی می کنم توضیح دهم که سوپ زیبا چگونه کار می کند و چگونه داده های اقتصادی را از کارخانه فارکس می ریزم ، به سادگی ممکن.

نمای کلی از سوپ زیبا و سلنیوم

این یک موضوع کمی پیشرفته تر است زیرا ابتدا باید دانش اساسی از پایتون و HTML داشته باشید. من فقط 1 ماه تجربه زیادی در پایتون ندارم. اما این برای من کافی است که در یادگیری سایر کتابخانه ها شروع کنم.

در سطح بالا ، آنچه زیبا انجام می دهد این است که در کل صفحه وب منبع HTML برای جستجوی برچسب های خاص که خواسته اید ، خزنده می شود. این می تواند تمام مقادیری را که در وب سایت مشاهده می کنید ، به شما بازگرداند اما نکته منفی این است که تعاملی نیست.

به عنوان مثال ، نمی تواند روی یک دکمه کلیک کند. این نمی تواند نام کاربری یا رمز عبور را تایپ کند. نمی توان روی صفحه بعدی کلیک کرد. دسترسی شما به اطلاعات فقط به آنچه در صفحه وب مشاهده می کنید محدود می شود.

این جایی است که سلنیوم وارد می شود. از سلنیوم برای فعال کردن تمام این توابع جاوا اسکریپت استفاده می شود. می توانید به سلنیوم بگویید که چه دکمه هایی را می خواهید کلیک کنید ، آنچه می خواهید در کادر جستجو و غیره تایپ کنید.

دیدن آن برای اولین بار بسیار جذاب است زیرا رایانه شما به طور خودکار اجرا می شود ، با سرعت بسیار سریع ، انجام همه کارهایی که به آن دستور داده اید انجام دهید. به نظر می رسد که کسی کنترل رایانه شما را به دست گرفته است.

مزیت سلنیوم این است که به BeautifulSoup اجازه می دهد تا دامنه وسیع تری از داده ها را خراش دهد. روند نزولی این است که همه چیز را کاهش می دهد. در حالت ایده آل ، استفاده از درخواست ها نسبت به سلنیوم ترجیح داده می شود و دومی باید به عنوان آخرین راه حل استفاده شود.

قسمت 1 - تهیه سوپ در گروه زیبا

برای شروع ، اینها برخی از کتابخانه هایی هستند که من از آنها استفاده کرده ام. من از پاندا برای ایجاد یک قاب داده و ذخیره تمام داده های جمع آوری شده استفاده کردم. زمان برای تازه کردن صفحه استفاده می شود.

این درخواست برای ارسال درخواست به سرور در مورد یک وب سایت خاص استفاده می شود. سپس سرور پاسخی به کاربر ارسال می کند. اینگونه است که وب سایت ها به طور کلی در اینترنت کار می کنند.

در این حالت ، من از لینک تقویم کارخانه فارکس برای ماه گذشته به عنوان متغیر URL خود استفاده کردم. سپس من به درخواست هایی می گویم تا این لینک را برای من دریافت کنید و پاسخی را برای من ارسال کنید.

پس از دریافت پاسخ از سرور. ما قصد داریم اطلاعات را به قالب متن تبدیل کنیم و داده ها را به BeautifulSoup تغذیه کنیم. سپس زیبا با استفاده از "LXML" سند را تجزیه می کند. این فرایند "تهیه سوپ" نامیده می شود. من این کار را نکردم ، مستقیماً از مستندات است.

قسمت 2 - جستجوی درخت در گروه زیبا

اکنون که یک سوپ داریم ، می توانیم هر چیز و همه چیز را در مورد وب سایت پیدا کنیم.

اولین کاری که باید انجام شود ، محدود کردن جستجو است. تمام وقایع تقویم در واقع در داخل یک جدول قرار دارد. اما میزهای زیادی در وب سایت نیز وجود دارد. بنابراین ما باید به سوپ بگوییم که روی کدام میز باید روی آن تمرکز کند.

forex factory calendar events

شما می توانید از ابزار بازرسی برای شناور در اطراف عناصر موجود در وب سایت استفاده کنید و به کدام مناطقی که می خواهید روی آنها تمرکز کنید ، پیدا کنید. پس از جستجو در اطراف ، مشخص شد که جدول شامل تمام رویدادهای تقویم دارای نام کلاس "Calendar_Table" است. بنابراین ما قصد داریم به سوپ بگوییم که فقط در داخل این میز جستجو کنیم و نه در هر جای دیگر.

در کد فوق ، ما در حال گفتن سوپ هستیم تا اولین نام برچسب جدول را با نام کلاس "Calendar_Table" پیدا کنیم. سپس آن را درون یک متغیر به نام جدول ذخیره کنید. اکنون جدول شامل این مجموعه از رویدادهای تقویم است که ما به آنها علاقه مند هستیم. این مرحله دوم است.

قسمت 3 - جستجو در داخل جدول

مرحله سوم درک یک ساختار جدول HTML است. من یک تصویر خوب پیدا کردم که خلاصه آنچه در داخل یک برچسب جدول می گذرد.

visual html table structure layout

https://www.codewall.co.uk/how-to--build-accessible-html-tables/

در داخل یک جدول ، معمولاً حاوی میز جدول ، ردیف جدول و داده های جدول است. به همین ترتیب ، در جدول فوق که ما فقط خزیدیم و ذخیره کردیم. همچنین دارای ردیف های جدول و برچسب داده های جدول است.

وظیفه بعدی تصمیم گیری برای بازیابی اطلاعات است. سپس مکان خاص محل سکونت این اطلاعات را در برچسب های جدول تعیین کنید. در مجموع 6 مورد وجود دارد که ما به آنها علاقه مندیم.

  1. ارز (کشور)
  2. نام رخداد
  3. رقم واقعی
  4. شکل پیش بینی شده
  5. شکل قبلی
  6. لینک منبع

با استفاده از همان روش نحوه یافتن جدول تقویم ، ما فقط در میان عناصر شناور می شویم تا دریابیم که نام های مربوط به برچسب و نام کلاس آنها چیست. به عنوان مثال ، من یکی را برای PMI تولید Caixin انجام داده ام

می بینید که همه آنها بین برچسب های داده جدول قرار دارند که هر کدام دارای نام کلاس منحصر به فرد هستند. بنابراین ما قصد داریم دوباره به سوپ بگوییم تا همه این نام های برچسب را در زیر جدول جستجو کند. اکنون فقط در جدول جستجو می شود زیرا ما آن را زودتر کاهش داده ایم.

نکته بعدی تنظیم فیلتر برای وقایع با تأثیر بالا است.

به عنوان مثال ، اگر سوپ پایتون در هر رویداد در جدول جستجو می کند ، فقط باید اطلاعات مربوط به مواردی را که تأثیر زیادی دارند ، استخراج کند. بقیه را باید نادیده گرفت. از این رو ، یک بیانیه مشروط باید درج شود.

قسمت 4 - استخراج پیوندهای URL

سرانجام ، ما به پیوندهای URL نیاز داریم که سلنیوم را قادر می سازد تا آخرین نسخه خبری را استخراج کند. این امر به این دلیل است که پیوندها در صفحه وب فعلی ما وجود ندارند. برای مشاهده اطلاعات بیشتر باید روی پوشه "جزئیات باز" کلیک کنید.

forex factory economic data

به عنوان مثال ، بیایید بگوییم که می خواهم پیوند PMI تولید ISM را دریافت کنم. من ابتدا باید روی پرونده روی نماد پوشه در سمت راست کلیک کنم ، سپس صفحه جدیدی را که در لینک URL نشان داده شده است ، ایجاد می کند. فقط در این صورت پیوند منبع مورد نظر ما را نشان می دهد. اگر اینطور نیست ، نمی توانید به این آخرین پیوند نسخه از صفحه اصلی دسترسی پیدا کنید.

اکنون باید راهی برای این اتفاق در هر حلقه پیدا کنیم که سوپ را جستجو می کند. یک راه می تواند استفاده از سلنیوم باشد و روی آن کلیک کنید. اما من با استفاده از درخواست ها روش سریع دیگری را فهمیدم.

اگر متوجه پیوند URL هر جزئیات رویداد هستید ، URL پایه یکسان است به جز اینکه یک شناسه جزئیات را در انتهای لینک اضافه می کند. مثلا:

https://www.forexfactory.com/calendar. php؟month=last#detail= 111377 https://www.forexfactory.com/calendar. php؟month=last#detail= 111365 https: //www.com/calendar. php؟ ماه = آخرین#جزئیات = 115868

تنها چیزی که لینک هر رویداد را متمایز می کند ، شماره شناسه جزئیات آنها در انتهای لینک است. از این رو ، ما می توانیم پیوند یک رویداد را به سادگی با استخراج شماره شناسه دریافت کنیم ، سپس آن را با پیوند اصلی URL جمع کنیم. این به همه اطلاعات اضافی مورد نیاز ما می دهد. در اینجا کد برای انجام آن است.

خط اول کد این است که لیست من را به یک قاب داده تبدیل کنید ، سپس نام ستون ها را به عنوان "کشور" ، "عنوان رویداد" ، "واقعی" ، "پیش بینی" و "قبلی" تنظیم کنید.

خط دوم کد جایی است که تمیز کردن انجام می شود. این گفته است که کل مقادیر رشته را در ستون اول بگیرید و آنها را توسط تعیین کننده " n" تقسیم کنید. این سه داده جداگانه را به وجود می آورد ، اما ما فقط به ارزش متوسط ، که نام ارز است ، علاقه مند هستیم. از این رو ، Str [1].

خط سوم کد فقط تنظیم ستون "کشور" برای ستون فهرست است.

و آخر اینکه ، من آن را با نام کشور مرتب کردم.

بیایید ببینیم که قاب داده اکنون چگونه به نظر می رسد.

بوماکنون بسیار مرتب به نظر می رسد. ما با موفقیت تمام وقایع با تأثیر بالا را با مقادیر واقعی ، پیش بینی و قبلی مربوطه آنها استخراج کرده ایم. در ژانویه 65 رویداد با تأثیر بالا وجود دارد. اکنون فقط یک چیز وجود دارد که از دست رفته است ، پیوند منبع.

قسمت 7 - تماس در سلنیوم

forex factory economic data

در این سریال ، من واقعاً قدرت سلنیوم را صدا نکرده ام. اما من تصمیم گرفتم از سلنیوم استفاده کنم زیرا قصد دارم تمام مقادیر واقعی تاریخی را برای هر جزئیات رویداد بگیرم.

می توانید 2 جعبه قرمز را در سمت راست مشاهده کنید. کاری که سلنیوم می تواند انجام دهد این است که بر روی دکمه بیشتر بارها و بارها کلیک کنید تا اینکه تمام راه را به اولین تاریخ برگرداند. هنگامی که کل جدول نقاط داده های تاریخی کاملاً نمایش داده می شود ، من از پایتون می خواهم که برود و تمام این تاریخ ها و مقادیر واقعی را بگیرد.

با این حال ، این ویژگی پیشرفته هنوز هم در حال حاضر کار در حال انجام است. اکنون من اولین نسخه اصلی را که جعبه سبز در سمت چپ است ، منتشر می کنم. این فقط می خواهد آخرین لینک منبع انتشار را بدست آورد. اگر بعد از چند هفته قسمت 2 را ندیدید. این بدان معنی است که پروژه من شکست خورده است.

به یاد داشته باشید در قسمت قبلی من شناسه رویداد را در هر تکرار حلقه استخراج کردم و سپس آن را با پیوند پایه URL اضافه کردم؟تمام این پیوندها در لیست پیوندها ذخیره می شوند.

کد بالا برای دریافت لینک منبع از طریق هر یک از لینک های موجود در لیست حلقه می شود. من صفحه را به مدت 2 ثانیه تازه می کنم و می خوابم. این امر به این دلیل است که گاهی اوقات هنگام بارگیری صفحه ، خطایی را به وجود می آورد ، اما پایتون برای جستجوی آن عجله کرد. حدود 3 دقیقه طول کشید تا پایتون تمام پیوندهای منبع را به من برگرداند. بیایید 10 مورد اول آنها را بررسی کنیم.

تا کنون خوب به نظر می رسداکنون بیایید تمام این پیوندها را در قاب داده اصلی خود قرار دهیم.

web scraping economic data

قسمت 8 - استخراج آن به اکسل

انجام شده! همه چیز عالی به نظر می رسدآخرین و آخرین مرحله استخراج این قاب داده در یک فایل اکسل است.

تاددر اینجا خروجی نهایی v1. 0 است. امیدوارم V2. 0 طی چند روز تحقق یابد.

web scraping economic data

این کل لیست رویدادهای اقتصادی با تأثیر بالا است که در ژانویه سال 2020 اتفاق افتاده است. از نرخ بیکاری گرفته تا بیانیه سیاست پولی ، فروش خرده فروشی گرفته تا موجودی نفت خام. Python و Beautifulsoup هر آنچه را که باید در مورد اقتصاد جهانی بدانید ، خراب کرده اند. از آنجا که من قبلاً کد را نوشتم ، می توانم به راحتی از آنها بخواهم که دوباره برای فوریه ، مارس و غیره جستجو کنند.

امیدوارم که این مقاله مختصراً از آنچه که زیبا انجام می دهد و مورد استفاده بالقوه آن را ارائه می دهد.

در آخر ، اگر شما علاقه مند به یادگیری دستور تهیه یک سوپ زیبا هستید ، صفحه منابع پایتون را که در آن تمام مطالب یادگیری خود را تلفیق می کنم ، بررسی کنید.

6 نظر

واقعاً از این کار هیجان زده است ، اما من به خطایی رسیدم.:/

"برای ردیف در جدول. find_all (‘ tr "،): AttributeError:" Ontype "شیء هیچ ویژگی" find_all "ندارد"

آیا ایده ای در مورد اینکه چرا این ممکن است باشد؟

بله Beacuse آن ما قادر به دریافت پاسخ مورد نیاز از سرور در هنگام بازیابی صفحه نیستیم.

به جای فیلتر فقط برای ضربه زیاد. چگونه فقط ارز USD را فیلتر کنیم؟

سلام، در نگاه اول بسیار جالب به نظر می رسید اما من با همان مشکلی که Arruda64 ذکر کرده است مواجه هستم

من نمی دانم که آیا هنوز در تلاش برای نهایی کردن پروژه هستید: (یعنی قادر به بازیابی کل نقاط داده تاریخی هر رویداد مهم هستید.)

چگونه می توان از پایتون برای استخراج بخش «چرا معامله گران اهمیت می دهند» استفاده کرد؟هر کمکی واقعا مفید خواهد بود.

به نظر می رسد کارخانه فارکس دیگر نمی خواهد کاربران وب سایت خود را خراش دهند

من سعی کردم بخشی از کد شما را اجرا کنم: ———————————————————— URL = 'https://www.forexfactory.com/calendar. php? month=last'پاسخ = requests. get(url) data = answer. text —————————————————————

که به صفحه فرود حفاظت DDOS رسیدم.

پاسخ دهیدلغو پاسخ

سلب مسئولیت

تمام نظرات بیان شده در این وبلاگ نظرات شخصی من است و به منزله مشاوره مالی حرفه ای نیست. این وبلاگ صرفاً برای اهداف آموزشی ایجاد شده است و فراخوانی برای خرید یا فروش هیچ گونه دارایی مالی نیست. لطفاً قبل از تصمیم گیری در مورد سرمایه گذاری، بررسی های لازم را انجام دهید یا با یک مشاور مالی دارای مجوز مشورت کنید.

تجارت با گزینه‌‌های باینری...
ما را در سایت تجارت با گزینه‌‌های باینری دنبال می کنید

برچسب : نویسنده : نازنین فراهانی بازدید : 52 تاريخ : چهارشنبه 17 خرداد 1402 ساعت: 0:08