| از BS4 واردات زیبا |
| درخواست های واردات |
| وارد کردن dateTime |
| ورود به سیستم واردات |
| واردات CSV |
| def setLogger (): |
| ورود به سیستمBasicConfig (سطح = ورود به سیستم. اطلاعات ، |
| فرمت = '٪ (asctime) s - ٪ (levelname) s - ٪ (پیام) s' ، |
| نام پرونده = 'logs_file' ، |
| filemode = 'w') |
| کنسول = ورود به سیستم. streamhandler () |
| FORMATTER = ورود به سیستم. Formatter ('٪ (Asctime) S - ٪ (LevelName) S - ٪ (پیام) S') |
| کنسول . setFormatter (قالب ساز) |
| ورود به سیستمGetLogger (''). addHandler (کنسول) |
| def getEconomicCalendar (startLink ، endlink): |
| # برای کنسول وضعیت فعلی بنویسید |
| ورود به سیستماطلاعات ("داده های خراش برای پیوند:<>". قالب (startLink)) |
| # صفحه را بگیرید و سوپ درست کنید |
| BaseUrl = "https://www.forexfactory.com/" |
| r = درخواست ها. Get (BaseUrl + StartLink) |
| داده = r. متن |
| سوپ = زیبا (داده ها ، "lxml") |
| # داده های جدول را دریافت و تجزیه کنید ، جزئیات و نمودار را نادیده بگیرید |
| جدول = سوپ. پیدا کردن ("جدول" ، class_ = "calendar__table") |
| # از انتخاب کننده CSS ". Calendar__Row-Grey" استفاده نکنید (برای داده های تاریخی رزرو شده است) |
| TRS = جدول. انتخاب کنید ("tr. calendar__row. calendar_row") |
| زمینه ها = ["تاریخ" ، "زمان" ، "ارز" ، "تأثیر" ، "رویداد" ، "واقعی" ، "پیش بینی" ، "قبلی"] |
| # برخی از ردیف ها تاریخ ندارند (سلول ها ادغام شده) |
| curr_year = startLink [ - 4:] |
| curr_date = "" |
| curr_time = "" |
| برای TR در TR: |
| # زمینه ها ممکن است گاهی اوقات به هم ریخته ، به TUE 25 سپتامبر 2:45 صبح هزینه های مصرف کننده فرانسوی مراجعه کنید |
| # در این حالت ما به خطاها اضافه می کنیم. csv زمان تاریخ خطا |
| تلاش كردن : |
| برای زمینه در زمینه ها: |
| داده = tr. انتخاب کنید ("td. calendar__cell. calendar__<>.<>". قالب (فیلد ، فیلد)) [0] |
| # چاپ (داده) |
| اگر زمینه == "تاریخ" و داده ها باشد. متننوار ()! = "": |
| curr_date = داده. متننوار () |
| ELIF FIELD == "زمان" و داده ها. متننوار ()! = "": |
| # زمان گاهی "تمام روز" یا "روز X" است (به عنوان مثال جلسات سالانه WEF) |
| اگر داده هامتننوار (). پیدا کردن ("روز")! = - 1: |
| curr_time = "12:00 صبح" |
| دیگری: |
| curr_time = داده. متننوار () |
| ELIF FIELD == "ارز": |
| ارز = داده. متننوار () |
| ELIF FIELD == "Impact": |
| # وقتی تأثیر می گوید "غیر اقتصادی" در موش ، مربوطه |
| # نام کلاس "تعطیلات" است ، بنابراین ما از نام کلاس استفاده نمی کنیم |
| تأثیر = داده ها. پیدا کردن ("دهانه") ["عنوان"] |
| ELIF FIELD == "رویداد": |
| رویداد = داده. متننوار () |
| elif field == "واقعی": |
| واقعی = داده. متننوار () |
| elif field == "پیش بینی": |
| پیش بینی = داده. متننوار () |
| ELIF FIELD == "قبلی": |
| قبلی = داده ها. متننوار () |
| dt = dateTime. زمان قرار . Strptime ("،" |
| "٪ y ، ٪ a ٪ b ٪ d ، ٪ i: ٪ m ٪ p") |
| چاپ ("،". به ([str (dt) ، ارز ، تأثیر ، رویداد ، واقعی ، پیش بینی ، قبلی] بپیوندید)) |
| بجز : |
| با Open ("errors. csv" ، "a") به عنوان f: |
| CSVنویسنده (f). نویسنده ([curr_year ، curr_date ، curr_time]) |
| # بازگشت مجدد هنگام رسیدن به آخرین پیوند موجود |
| اگر startLink == endlink: |
| ورود به سیستماطلاعات ("داده های بازیابی با موفقیت") |
| برگشت |
| # لینک را برای هفته آینده دریافت کنید و دنبال کنید |
| دنبال کنید = سوپ. انتخاب کنید ("a. calendar__pagination. calendar__pagination-next. next") |
| دنبال کنید = دنبال کنید [0] ["href"] |
| GetEconomicCalendar (دنبال کنید ، endlink) |
| اگر __name__ == "__main__": |
| """ |
| Run this using the command "python `script_name`.py>>`output_name`. csv" |
| """ |
| setLogger () |
| GetEconomicCalendar ("Calendar. php؟ هفته = ژانویه 7. 2007" ، "Calendar. php؟ هفته = DEC24. 2017") |