Naucz się zdrapywać dane finansowe za pomocą Pythona

Opublikowany: 2019-04-26
Spis treści pokaż
Po co indeksować dane z Yahoo Finance?
Jak zgarnąć dane finansowe w sieci Web za pomocą Pythona?
1. Zacznij od kodu do złomowania w Pythonie
2. Wyjaśnienie kodu robota
3. Niektóre ważne punkty danych, które przechwyciliśmy
Jakie dane możesz przeszukiwać z Yahoo Finance?
Jakie inne dane finansowe możesz przeszukiwać?
Wykorzystane przypadki Danych Finansowych Yahoo
Potrzebujesz pomocy przy wyodrębnianiu danych internetowych?

Giełda to ogromna baza danych z milionami wpisów, które są aktualizowane co sekundę. Chociaż istnieje wiele firm, które dostarczają dane finansowe firm, zwykle odbywa się to za pośrednictwem API (interfejsu programowania aplikacji). Jak można się domyślić, te interfejsy API nigdy nie są bezpłatne. Yahoo Finance jest zaufanym źródłem danych giełdowych i ma płatny interfejs API. Poprowadzimy Cię krok po kroku, jak zbierać dane Yahoo Finance za pomocą Pythona.

Po co indeksować dane z Yahoo Finance?

Jeśli potrzebujesz darmowych, czystych danych finansowych z zaufanego źródła, Yahoo Finance jest najlepszym rozwiązaniem. Strony z profilem firmy są zbudowane w jednolitej strukturze, dzięki czemu web scraping python jest łatwy. Jeśli napiszesz skrypt do indeksowania danych ze strony finansowej firmy Microsoft, ten sam skrypt może być również użyty do indeksowania danych ze strony finansowej firmy Apple.

Jak zgarnąć dane finansowe w sieci Web za pomocą Pythona?

Aby rozpocząć instalację i rozpocząć, możesz zapoznać się z podstawowymi krokami z tego artykułu na temat zbierania danych w Pythonie , w którym omówiliśmy sposób indeksowania danych z wiodącego portalu rezerwacji hoteli. Po zainstalowaniu wszystkich zależności wraz z edytorem kodu Atom zacznijmy od zgarniania Yahoo Finance za pomocą Pythona.

1. Zacznij od kodu do złomowania w Pythonie

Po zakończeniu etapów instalacji i konfiguracji możemy przejść od razu do kodu i rozpocząć Yahoo Finance Scraping. Kod podano poniżej i można go uruchomić za pomocą tylko polecenia Pythona.

jak-zeskrobać-yahoo-finanse-dane

Możesz uruchomić kod w sposób pokazany powyżej. Po wyświetleniu monitu wpisz adres URL firmy, której podsumowanie finansowe chcesz sprawdzić. Wykorzystaliśmy link do Microsoftu.

[język kodu=”python”]
#!/usr/bin/python
# -*- kodowanie: utf-8 -*-
importuj urllib.request
importuj urllib.parse
importuj urllib.error
z bs4 importuj BeautifulSoup
importuj ssl
importuj json
importuj ast
importuj system
z urllib.request import Żądanie, urlopen

# Do ignorowania błędów certyfikatu SSL
ctx = ssl.utwórz_domyślny_kontekst()
ctx.check_hostname = Fałsz
ctx.verify_mode = ssl.CERT_Brak

# Dane wejściowe od użytkownika
url = input('Wprowadź adres URL firmy Yahoo Finance-')
# Sprawienie, by witryna uwierzyła, że ​​uzyskujesz do niej dostęp za pomocą przeglądarki Mozilla
req = Request(url, headers={'User-Agent': 'Mozilla/5.0'})
strona internetowa = urlopen(req).read()
# Tworzenie obiektu BeautifulSoup strony HTML w celu łatwego wydobycia danych.

zupa = PięknaZupa(strona internetowa, 'html.parser')
html = zupa.prettify('utf-8')
firma_json = {}
inne_szczegóły = {}
for span w soup.findAll('span',
attrs={'klasa': 'Trsdu(0.3s) Trsdu(0.3s) Fw(b) Fz(36px) Mb(-4px) D(b)'
}):
company_json['PRESENT_VALUE'] = span.text.strip()
dla div w soup.findAll('div', attrs={'class': 'D(ib) Va(t)'}):
dla zakresu w div.findAll('span', recursive=False):
company_json['PRESENT_GROWTH'] = span.text.strip()
for td in soup.findAll('td', attrs={'data-test': 'PREV_CLOSE-value'}):
dla zakresu w td.findAll('span', recursive=False):
inne_szczegóły['PREV_CLOSE'] = span.text.strip()
for td in soup.findAll('td', attrs={'data-test': 'OPEN-value'}):
dla zakresu w td.findAll('span', recursive=False):
other_details['OPEN'] = span.text.strip()
for td in soup.findAll('td', attrs={'data-test': 'BID-value'}):
dla zakresu w td.findAll('span', recursive=False):
other_details['BID'] = span.text.strip()
for td in soup.findAll('td', attrs={'data-test': 'wartość-zadania'}):
dla zakresu w td.findAll('span', recursive=False):
other_details['ZAPYTAJ'] = span.text.strip()
for td in soup.findAll('td', attrs={'data-test': 'DAYS_RANGE-value'}):
dla zakresu w td.findAll('span', recursive=False):
other_details['DAYS_RANGE'] = span.text.strip()
for td in soup.findAll('td',
attrs={'test danych': 'FIFTY_TWO_WK_RANGE-value'}):
dla zakresu w td.findAll('span', recursive=False):
other_details['FIFTY_TWO_WK_RANGE'] = span.text.strip()
for td in soup.findAll('td', attrs={'data-test': 'TD_VOLUME-value'}):
dla zakresu w td.findAll('span', recursive=False):
other_details['TD_VOLUME'] = span.text.strip()
for td in soup.findAll('td',
attrs={'test danych': 'WARTOŚĆ ŚREDNIA_WOLUMEN_3MIESIĄCA'
}):
dla zakresu w td.findAll('span', recursive=False):
other_details['AVERAGE_VOLUME_3MONTH'] = span.text.strip()
for td in soup.findAll('td', attrs={'data-test': 'MARKET_CAP-value'}):
dla zakresu w td.findAll('span', recursive=False):
other_details['MARKET_CAP'] = span.text.strip()
for td in soup.findAll('td', attrs={'data-test': 'BETA_3Y-value'}):
dla zakresu w td.findAll('span', recursive=False):
other_details['BETA_3Y'] = span.text.strip()
for td in soup.findAll('td', attrs={'data-test': 'PE_RATIO-value'}):
dla zakresu w td.findAll('span', recursive=False):
other_details['PE_RATIO'] = span.text.strip()
for td in soup.findAll('td', attrs={'data-test': 'EPS_RATIO-value'}):
dla zakresu w td.findAll('span', recursive=False):
other_details['EPS_RATIO'] = span.text.strip()
for td in soup.findAll('td', attrs={'data-test': 'EARNINGS_DATE-value'
}):
other_details['EARNINGS_DATE'] = []
dla zakresu w td.findAll('span', recursive=False):
other_details['ZAROBY_DATA'].append(span.text.strip())
for td in soup.findAll('td',
atrs={'test danych': 'DIVIDEND_AND_YIELD-value'}):
inne_szczegóły['DIVIDEND_AND_YIELD'] = td.text.strip()
for td in soup.findAll('td',
atrs={'data-test': 'EX_DIVIDEND_DATE-value'}):
dla zakresu w td.findAll('span', recursive=False):
other_details['EX_DIVIDEND_DATE'] = span.text.strip()
for td in soup.findAll('td',
attrs={'test danych': 'WARTOŚĆ ONE_YEAR_TARGET_PRICE'
}):
dla zakresu w td.findAll('span', recursive=False):
other_details['ONE_YEAR_TARGET_PRICE'] = span.text.strip()
company_json['OTHER_DETAILS'] = inne_szczegóły
z open('data.json', 'w') jako plik zewnętrzny:
json.dump(firma_json, plik wyjściowy, wcięcie=4)
drukuj company_json
z open('output_file.html', 'wb') jako plik:
file.write(html)
print '———-Wyodrębnianie danych zakończone. Sprawdź plik json.———-'

[/kod]

Po uruchomieniu kodu i wprowadzeniu firmowego adresu URL na terminalu zostanie wydrukowany plik json. Ten json zostanie również zapisany w pliku o nazwie „data.json” w twoim folderze. W przypadku firmy Microsoft uzyskaliśmy następujący kod JSON.

[język kodu=”python”]
{
„OBECNY WZROST”: „+1,31 (+0,67%)”,
„PRESENT_VALUE”: „197,00”,
„PREV_CLOSE”: „195,69”,
„OTWARTY”: „196.45”,
„OFERTA”: „196,89 x 900”,
„ZAPYTAJ”: „197,00 x 1400”,
„TD_VOLUME”: „18 526 644”,
„ŚREDNIA_WOLUMEN_3 MIESIĄC”: „29 962 082”,
„WSPÓŁPRACA_RYNKOWA”: „928.91B”,
„BETA_3Y”: „0,91”,
„WSKAŹNIK PE_RATIO”: „16,25”,
„WSKAŹNIK_EPS”: „12.12”,
„DATA_ZARODÓW”: [
„30 kwietnia 2019 r.”
],
„DZIELNICAEND_I_ZYSK”: „2,92 (1,50%)”,
„EX_DIVIDEND_DATE”: „2019-02-08”,
„ONE_YEAR_TARGET_PRICE”: „190.94”
}
[/kod]

Dla firmy Apple, która ostatnio wielokrotnie traciła, JSON wyglądał tak.

[język kodu=”python”]

{
„PRESENT_VALUE”: „198,87”,
„OBECNY_WZROST”: „-0,08 (-0,04%)”,
"INNE SZCZEGÓŁY": {
„PREV_CLOSE”: „198,95”,
„OTWÓRZ”: „199.20”,
„OFERTA”: „198,91 x 800”,
„ZAPYTAJ”: „198,99 x 1000”,
„TD_VOLUME”: „27 760 668”,
„ŚREDNIA_WOLUMEN_3 MIESIĄC”: „28 641 896”,
„WSPÓŁPRACA_RYNKOWA”: „937.728B”,
„BETA_3Y”: „0,91”,
„WSKAŹNIK PE_RATIO”: „16,41”,
„WSKAŹNIK_EPS”: „12.12”,
„DATA_ZARODÓW”: [
„30 kwi 2019”
],
„DZIELNICAEND_I_ZYSK”: „2,92 (1,50%)”,
„EX_DIVIDEND_DATE”: „2019-02-08”,
„ONE_YEAR_TARGET_PRICE”: „193.12”
}
}

[/kod]

Możesz zrobić to samo z dowolną liczbą firm, które chcesz i tak często, jak chcesz być na bieżąco.

2. Wyjaśnienie kodu robota

Podobnie jak poprzednie kody do skrobania stron internetowych, również w tym przypadku najpierw uzyskaliśmy cały plik HTML. Na tej podstawie zidentyfikowaliśmy konkretne tagi (z określonymi klasami), które zawierały potrzebne nam dane. Ten krok został wykonany ręcznie dla pojedynczej strony szczegółów firmy. Po zidentyfikowaniu konkretnych tagów i ich klas użyliśmy pięknej zupy, aby usunąć te tagi za pomocą naszego kodu.

Następnie z każdego z tych tagów skopiowaliśmy niezbędne dane do zmiennej o nazwie company_json. Jest to plik json, który ostatecznie zapisaliśmy w pliku typu JSON o nazwie data.json. Możesz zobaczyć, że zapisaliśmy również zeskrobany kod HTML do pliku o nazwie plik_wyjściowy.html w Twojej pamięci lokalnej. Odbywa się to, abyś mógł samodzielnie przeanalizować stronę HTML i wymyślić inne techniki zbierania danych w Pythonie, aby indeksować więcej danych.

3. Niektóre ważne punkty danych, które przechwyciliśmy

  • PREV_CLOSE: Odnosi się do ceny zamknięcia akcji z poprzedniego dnia notowań. Wartość akcji z poprzedniego dnia odnosi się tylko do ostatniej ceny zamknięcia w dniu, w którym giełda była otwarta (nie w święta).
  • OPEN: Cena otwarcia, zwana również w skrócie Open, to cena wywoławcza akcji w dniu obrotu. Na przykład cena otwarcia dla dowolnej giełdy na giełdzie nowojorskiej (NYSE) byłaby jej ceną o godzinie 9:30 czasu wschodniego.
  • ZAMÓW I ZAPYTAJ: Obie ceny są kwotowaniami za jedną akcję akcji. Oferta odnosi się do ceny, którą kupujący są gotowi za nią zapłacić, podczas gdy pytanie dotyczy tego, za co sprzedający są skłonni ją sprzedać. Mnożnik odnosi się do liczby akcji będących w obrocie po ich cenach.
  • TD_VOLUME: To po prostu liczba akcji, które zmieniły właściciela w ciągu dnia.
  • PE_RATIO: Prawdopodobnie najważniejszy pojedynczy czynnik, na który zwracają uwagę inwestorzy, jest obliczany poprzez podzielenie bieżącej ceny rynkowej akcji spółki przez zysk na akcję spółki. Mówiąc najprościej, jest to suma pieniędzy, którą można zapłacić za każdą wartość rupii zarobków firmy.

Powodem, dla którego wyjaśniliśmy niektóre ważne punkty danych, jest to, że chcieliśmy, abyś wiedział, jak głęboko możesz zagłębić się w finanse firmy, po prostu zeskrobując dane z jej strony Yahoo Finance.

Jakie dane możesz przeszukiwać z Yahoo Finance?

Będziesz mógł indeksować różne punkty danych za pomocą tego skrobaka Pythona. Najważniejsza jest aktualna wartość i obecny procent wzrostu lub spadku. Inne punkty danych, oglądane razem, przedstawiają lepszy obraz i pomagają zdecydować, czy inwestowanie w akcje firmy byłoby dobrym pomysłem, czy nie. Spojrzenie na migawkę danych może jednak nie okazać się zbyt skuteczne. Pozyskiwanie danych w regularnych odstępach czasu i wykorzystywanie dużego zbioru danych do przewidywania przyszłych cen akcji może okazać się bardziej przydatne w dłuższej perspektywie.

Jakie inne dane finansowe możesz przeszukiwać?

Dane finansowe, które zebraliśmy, pochodzą ze strony podsumowania firmy w Yahoo Finance. Każda firma ma również stronę z wykresami, na której można zobaczyć dane giełdowe z maksymalnie pięciu lat. Chociaż dane nie są dokładnie ustrukturyzowane, możliwość ich indeksowania może dać bardzo dobry wgląd w historyczne wyniki akcji firmy.

Strona statystyk zawiera ponad trzydzieści różnych punktów danych, oprócz tych, które przechwyciliśmy. Są one w ustrukturyzowanym formacie i można je zeskrobać za pomocą kodu podobnego do tego, który podaliśmy.

Dane historyczne zawierają dane ze strony wykresu, ale w formacie zbliżonym do CSV – możesz łatwo wyodrębnić dane i zapisać je w pliku CSV. Inne strony, takie jak profil, finanse, analizy, opcje, posiadacze i zrównoważony rozwój, mogą dać dobre oszacowanie wyników akcji firmy w porównaniu z jej konkurentami.

Wykorzystane przypadki Danych Finansowych Yahoo

Możesz użyć danych historycznych do przewidywania cen akcji lub możesz stworzyć aplikację, która używa regularnie aktualizowanych danych z twojego silnika skrobania, aby dostarczać aktualizacje użytkownikom. Możesz polecić, kiedy należy sprzedać ich akcje, a kiedy kupić więcej – możliwości są nieograniczone!

Jeśli masz mały zespół i nie możesz zdecydować, jak zacząć od web scrapingu, możesz skorzystać z pomocy zaangażowanego i doświadczonego zespołu web scrapingu, takiego jak PromptCloud. Nasz pulpit zbierający wymagania dotyczące web scrapingu sprawia, że ​​przesyłanie wymagań, uzyskiwanie wyceny i wreszcie uzyskiwanie danych w formacie plug and play jest prostym i nieskomplikowanym procesem.


Potrzebujesz pomocy przy wyodrębnianiu danych internetowych?

Uzyskaj czyste i gotowe do użycia dane ze stron internetowych dla aplikacji biznesowych dzięki naszym usługom web scrapingu.

Ups! Nie mogliśmy znaleźć Twojego formularza.

Zastrzeżenie: Kod dostarczony w tym samouczku służy wyłącznie do celów edukacyjnych. Nie ponosimy odpowiedzialności za sposób jego wykorzystania i nie ponosimy odpowiedzialności za jakiekolwiek szkodliwe wykorzystanie kodu źródłowego.