R-Bloggers

ساخت وبلاگ

R-bloggers

اخبار و آموزش های R توسط صدها وبلاگ نویس R

خراش داده های مالی از Finviz با بسته R و RVEST

ارسال شده در 13 مارس 2023 توسط R |Typethepipe در وبلاگ نویسان R |0 نظر

[این مقاله برای اولین بار در R |Typethepipe ، و با مهربانی به R-Bloggers کمک کرد].(می توانید در مورد محتوای این صفحه در اینجا شماره را گزارش دهید) آیا می خواهید محتوای خود را در R-Bloggers به اشتراک بگذارید؟اگر یک وبلاگ دارید ، اینجا را کلیک کنید ، یا اگر این کار را نمی کنید اینجا.

معرفی

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

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

سلب مسئولیت

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

داخل آب

برای ساخت این اسکرابر ساده می خواهیم از بسته RVEST استفاده کنیم. توسعه دهندگان R کاملاً خنده دار هستند ، مگر نه؟

اولین چیز این است که HTML کامل را بدست آوریم که بعداً تجزیه خواهیم کرد.

نماد ") finviz_html

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

ما می خواهیم به طور عمده روی جدول در پایین تمرکز کنیم که شامل یک تن اطلاعات برای شرکت است ، از جمله داده های مربوطه مانند سرمایه بازار ، P/E ، مالکیت خودی و نهادی یا علاقه کوتاه. همچنین ، خوب است که شرکت های ما توسط بخش و صنعت سازماندهی شوند ، زیرا این اطلاعات برای تجزیه و تحلیل بالقوه نیز مهم است. بیایید ابتدا این اطلاعات کوچک را که درست زیر نمودار قرار دارد ، در وسط صفحه دریافت کنیم:

sector_str % rvest::html_element(xpath = '/html/body/div[4]/div/table[1]') %>% rvest::html_table() %>% head(1) %>٪ PULL (x4) SECTOR_STR ## [1] "فناوری | نرم افزار - زیرساخت | ایالات متحده"

پیدا کردن مسیر به عنصر خاص مورد نظر ما به آسانی است که قدم گذاشتن به حالت در حال توسعه در مرورگر وب (F12) و پیدا کردن راه خود به عنصر در کد HTML است. کلیک راست و کپی XPath همانطور که در تصویر زیر نشان داده شده است:

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

ما می توانیم آن را به راحتی با مقداری مهندسی متن تمیز کنیم. Tidyverse دوباره روز را نجات می دهد:

sector_df % str_split("[|]", simplify = T) %>% str_squish() %>% as_tibble() %>% mutate(variable = c("sector", "industry", "country")) %>% relocate(variable) %>٪ add_row (متغیر = "تیک" ، مقدار = نماد ، . BEFORE = 1) SECTOR_DF ## # A TIBBLE: 4 × 2 ## ارزش متغیر ## ## 1 Ticker MSFT ## 2 Technology Sector ## 3 نرم افزار صنع ت-زیرساخت ## 4 کشور ایالات متحده آمریکا

ما اکنون جدول اصلی را خراب خواهیم کرد:

raw_tbl % rvest::html_element(xpath = '/html/body/div[4]/div/table[2]') %>٪ rvest :: html_table ()

با این حال ، در این حالت متغیرها و مقادیر کاملاً در جدول مخلوط شده اند:

RAW_TBL ## # A TIBBLE: 12 × 12 ## x1 x2 x3 x5 x5 x6 x8 x9 x9 x10 x12 ## ## index djia ،… p/e 28. 23 eps… 8. 99 insi… 0. 06 ٪ shs… 7. 45b perf…2. 33 ٪ ## 2 کلاه بازار 1918.… Forw… 23. 63 EPS… 10. 75 insi… -0. 7… 7. 44b perf… -1. 1… ## 3 درآمد 67. 45b PEG 2. 35 EPS… 2. 23 inst… 72. 4… Shor… 0. 46… عالم ...… 5. 97 ٪ ## 4 فروش 204. 0… P/S 9. 40 EPS… 19. 8… 0. 46 ٪ Shor… 34. 3… -2. 4… ## 5 کتاب/SH 24. 58 P/B 10. 33 EPS ... 14. 8… ROA 18. 8… Targ…285.… perf… -7. 1… ## 6 Cash/Sh 13. 17 P/C 19. 28 EPS… 12. 0… Roe 39. 3… 52w… 213.… 8. 44 ٪ ## 7 سود سهام 2. 72 P/FCF 47. 19 EPS ... 24. 3… ROI 31. 33… 52W… -17.… BETA 0. 91 ## 8 سود سهام 1. 07 ٪ Quic… 1. 90 فروش… 15. 5… Gros… 68. 2… 52W… 21. 8… ATR 6. 35 ## 9 کارمندان 221000 Curr… 1. 90 فروش… 2. 00 ٪ Oper… 40. 5… RSI… 56. 94 Vola… 2. 68… ## 10 گزینه بله بدهی… 0. 35 EPS… -11.… 33. 0… rel… 0. 90 prev… 253. ## 11 کوتاه بله d… 0. 32 کسب ... ژانویه… 28. 1… avg… 31. 2… قیمت 260. ## 12 recom 1. 90 SMA20 1. 73 ٪ SMA50 4. 59 ٪ SMA2… 3. 01 ٪ Volu… 11،4… Chan… 2. 42 ٪

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

# flatten_chr will collapse all columns into one vector headers % select(seq(1,11,2)) %>% flatten_chr() values % select(seq(2,12,2)) %>٪ flatten_chr ()

این همان چیزی است که وکتور هدر به نظر می رسد:

هدرها ## [1] "فهرست" "درپوش بازار" "درآمد" "## [4]" فروش "" کتاب/sh "" نقدی/sh "## [7]" سود سهام "" سود سهام "٪" "کارمندان" ## [10] "گزینه ای" "کوتاه" "recom" ## [13] "p/e" "به جلو P/E" "PEG" ## [16] "P/S" "P/B" "P/C "## [19]" P/FCF "" نسبت سریع "" نسبت فعلی "## [22]" بدهی/EQ "" LT بدهی/EQ "" SMA20 "" ## [25] "EPS (TTM)""eps next y" "eps next q" ## [28] "eps this y" "eps next y" "eps next 5y" ## [31] "eps گذشته 5y" "فروش گذشته 5y" "فروش q/q"## [34]" eps q/q "" درآمد "" SMA50 "## [37]" خودی خود "" خودی Trans "" Inst خود "" ## [40] "Inst Trans" "Roa" "Roe"## [43] "ROI" "حاشیه ناخالص" "عمل" حاشیه "## [46]" حاشیه سود "" پرداخت "" SMA200 "" ## [49] "SHS OUTTAND" "SHS FLOAT" "SHS FLOAT" ""## [52]" علاقه کوتاه "" قیمت هدف "" 52W دامنه "## [55]" 52W HIGH "" 52W LOW "" RSI (14) "## [58]" VOLUE "" VOLUE "" VOLUE ""جلد" ## [61] "هفته عطر" "ماه عطر" "چهارم"نوسانات "## [70]" Prev Close "" قیمت "" تغییر "

کامل! سرانجام همه اطلاعات را با هم چسباند ، ما این قاب داده خوب را دریافت می کنیم که حاوی تمام اطلاعات است:

finviz_df % bind_cols(variable = headers, .) %>٪ bind_rows (sector_df ،.) finviz_df ## # a tibble: 76 × 2 ## ارزش متغیر ## ## 1 Ticker MSFT ## 2 Technology Sector ## 3 نرم افزار صنعت - زیرساخت ها ## 4 کشور USA ## 5 شاخص DJIA، NDX ، S& P 500 ## 6 CAP MARKET 1918. 49B ## 7 درآمد 67. 45b ## 8 فروش 204. 09b ## 9 کتاب/SH 24. 58 ## 10 Cash/Sh 13. 17 ##… با 66 ردیف دیگر

عملکردی برای از بین بردن

ما به راحتی می توانیم تابعی را جمع کنیم که همه این قطعات را با هم می پیوندد. آماده برای غرش:

Get_finviz_data ") finviz_html % rvest::html_element(xpath = '/html/body/div[4]/div/table[1]') %>% rvest::html_table() %>% head(1) %>% pull(X4) sector_df % str_split("[|]", simplify = T) %>% str_squish() %>% as_tibble() %>% mutate(variable = c("sector", "industry", "country")) %>% relocate(variable) %>% add_row(variable = "ticker", value = symbol, .before = 1) raw_tbl % rvest::html_element(xpath = '/html/body/div[4]/div/table[2]') %>% rvest::html_table() headers % select(seq(1,11,2)) %>% flatten_chr() values % select(seq(2,12,2)) %>% flatten_chr() finviz_df % bind_cols(variable = headers, .) %>% bind_rows(sector_df, .) retu(finviz_df)>

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

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

برچسب : نویسنده : عبدالله بوتیمار بازدید : <-PostHit-> تاريخ : چهارشنبه 15 شهريور 1402 ساعت: 21:42