Învață să răzuiești datele financiare folosind Python
Publicat: 2019-04-26Piața de valori este o bază de date uriașă cu milioane de intrări care sunt actualizate în fiecare secundă. Deși există multe companii care furnizează date financiare ale companiilor, acestea sunt de obicei printr-un API (interfață de programare a aplicației). Și după cum probabil ați ghicit, aceste API-uri nu sunt niciodată gratuite. Yahoo Finance este o sursă de încredere de date bursiere și are un API plătit. Vă vom ghida într-un proces pas cu pas despre cum să răzuiți datele Yahoo Finance folosind Python.
De ce accesați cu crawlere datele de la Yahoo Finance?
Dacă aveți nevoie de date financiare gratuite și curate de la o sursă de încredere, Yahoo Finance este cel mai bun pariu. Paginile web de profil ale companiei sunt construite într-o structură uniformă, ceea ce face python-ul web scraping ușor. Dacă scrieți un script pentru accesarea cu crawlere a datelor de pe pagina financiară a Microsoft, același script ar putea fi folosit și pentru accesarea cu crawlere a datelor din pagina financiară a Apple.
Cum să răzuiți datele financiare pe Web folosind Python?
Pentru instalare și începere, puteți consulta pașii de bază din acest articol despre data scraping python , unde am discutat despre cum să accesați cu crawlere datele dintr-un portal de rezervări hoteliere de top. După ce ați instalat toate dependențele împreună cu editorul de cod Atom, să începem cu răzuirea Yahoo Finance cu Python.
1. Începeți cu Codul pentru Scraping cu Python
Odată ce etapele de instalare și configurare sunt finalizate, putem intra direct în cod și începe Yahoo Finance Scraping. Codul este prezentat mai jos și poate fi rulat folosind doar comanda Python.

Puteți rula codul în modul arătat mai sus. Când vi se solicită, introduceți adresa URL a companiei al cărei rezumat financiar doriți să îl verificați. Am folosit linkul pentru Microsoft.
[limbajul codului=”python”]
#!/usr/bin/python
# -*- codificare: utf-8 -*-
import urllib.request
import urllib.parse
import urllib.error
de la bs4 import BeautifulSoup
import ssl
import json
import ast
import os
din urllib.request import Request, urlopen
# Pentru ignorarea erorilor de certificat SSL
ctx = ssl.create_default_context()
ctx.check_hostname = Fals
ctx.verify_mode = ssl.CERT_NONE
# Intrare de la utilizator
url = input('Introduceți URL-ul companiei Yahoo Finance- ')
# A face site-ul web să creadă că îl accesați folosind un browser Mozilla
req = Solicitare(url, headers={'User-Agent': 'Mozilla/5.0'})
pagina web = urlopen(req).read()
# Crearea unui obiect BeautifulSoup al paginii HTML pentru extragerea ușoară a datelor.
supă = BeautifulSoup (pagina web, 'html.parser')
html = sup.prettify('utf-8')
company_json = {}
alte_detalii = {}
pentru span in soup.findAll('span',
attrs={'class': 'Trsdu(0.3s) Trsdu(0.3s) Fw(b) Fz(36px) Mb(-4px) D(b)'
}):
company_json['PRESENT_VALUE'] = span.text.strip()
pentru div în supă.findAll('div', attrs={'class': 'D(ib) Va(t)'}):
pentru span în div.findAll('span', recursive=False):
company_json['PRESENT_GROWTH'] = span.text.strip()
pentru td în soup.findAll('td', attrs={'data-test': 'PREV_CLOSE-value'}):
pentru span în td.findAll('span', recursive=False):
alte_detalii['PREV_CLOSE'] = span.text.strip()
pentru td în soup.findAll('td', attrs={'data-test': 'OPEN-value'}):
pentru span în td.findAll('span', recursive=False):
alte_detalii['OPEN'] = span.text.strip()
pentru td în soup.findAll('td', attrs={'data-test': 'BID-value'}):
pentru span în td.findAll('span', recursive=False):
alte_detalii['BID'] = span.text.strip()
pentru td în soup.findAll('td', attrs={'data-test': 'ASK-value'}):
pentru span în td.findAll('span', recursive=False):
alte_detalii['ASK'] = span.text.strip()
pentru td în soup.findAll('td', attrs={'data-test': 'DAYS_RANGE-value'}):
pentru span în td.findAll('span', recursive=False):
alte_detalii['DAYS_RANGE'] = span.text.strip()
pentru td în supă.findAll('td',
attrs={'data-test': 'FIFTY_TWO_WK_RANGE-value'}):
pentru span în td.findAll('span', recursive=False):
other_details['FIFTY_TWO_WK_RANGE'] = span.text.strip()
pentru td în soup.findAll('td', attrs={'data-test': 'TD_VOLUME-value'}):
pentru span în td.findAll('span', recursive=False):
alte_detalii['TD_VOLUME'] = span.text.strip()
pentru td în supă.findAll('td',
attrs={'data-test': 'AVERAGE_VOLUME_3MONTH-valoare'
}):
pentru span în td.findAll('span', recursive=False):
alte_detalii['AVERAGE_VOLUME_3MONTH'] = span.text.strip()
pentru td în soup.findAll('td', attrs={'data-test': 'MARKET_CAP-value'}):
pentru span în td.findAll('span', recursive=False):
alte_detalii['MARKET_CAP'] = span.text.strip()
pentru td în soup.findAll('td', attrs={'data-test': 'BETA_3Y-value'}):
pentru span în td.findAll('span', recursive=False):
alte_detalii['BETA_3Y'] = span.text.strip()
pentru td în soup.findAll('td', attrs={'data-test': 'PE_RATIO-value'}):
pentru span în td.findAll('span', recursive=False):
alte_detalii['PE_RATIO'] = span.text.strip()
pentru td în soup.findAll('td', attrs={'data-test': 'EPS_RATIO-value'}):
pentru span în td.findAll('span', recursive=False):
alte_detalii['EPS_RATIO'] = span.text.strip()
pentru td în soup.findAll('td', attrs={'data-test': 'EARNINGS_DATE-value'
}):
alte_detalii['EARNINGS_DATE'] = []
pentru span în td.findAll('span', recursive=False):
alte_detalii['EARNINGS_DATE'].append(span.text.strip())
pentru td în supă.findAll('td',
attrs={'data-test': 'DIVIDEND_AND_YIELD-valoare'}):
alte_detalii['DIVIDEND_AND_YIELD'] = td.text.strip()
pentru td în supă.findAll('td',
attrs={'data-test': 'EX_DIVIDEND_DATE-value'}):
pentru span în td.findAll('span', recursive=False):
alte_detalii['EX_DIVID_DATE'] = span.text.strip()
pentru td în supă.findAll('td',
attrs={'data-test': 'ONE_YEAR_TARGET_PRICE-value'
}):
pentru span în td.findAll('span', recursive=False):
alte_detalii['ONE_YEAR_TARGET_PRICE'] = span.text.strip()
company_json['OTHER_DETAILS'] = alte_detalii
cu open('data.json', 'w') ca fişier de ieşire:
json.dump(company_json, outfile, indent=4)
print company_json
cu open('output_file.html', 'wb') ca fișier:
file.write(html)
print '———-Extragerea datelor este completă. Verificați fișierul json.———-'

[/cod]
Odată ce rulați codul și introduceți adresa URL a unei companii, veți vedea un json tipărit pe terminalul dvs. Acest json va fi salvat și într-un fișier cu numele „data.json” în folderul dvs. Pentru Microsoft, am obținut următorul JSON.
[limbajul codului=”python”]
{
„PRESENT_GROWTH”: „+1,31 (+0,67%)”,
„PRESENT_VALUE”: „197.00”,
„PREV_CLOSE”: „195.69”,
„DESCHIS”: „196.45”,
„BID”: „196,89 x 900”,
„ASK”: „197.00 x 1400”,
„TD_VOLUME”: „18.526.644”,
„AVERAGE_VOLUME_3MONTH”: „29.962.082”,
„MARKET_CAP”: „928.91B”,
„BETA_3Y”: „0,91”,
„PE_RATIO”: „16.25”,
„EPS_RATIO”: „12.12”,
„EARNINGS_DATE”: [
„30 aprilie 2019”
],
„DIVIDEND_AND_YIELD”: „2,92 (1,50%)”,
„EX_DIVIDEND_DATE”: „2019-02-08”,
„ONE_YEAR_TARGET_PRICE”: „190,94”
}
[/cod]
Pentru Apple, care a înregistrat mai multe pierderi în ultimul timp, JSON arăta așa.
[limbajul codului=”python”]
{
„PRESENT_VALUE”: „198,87”,
„PRESENT_GROWTH”: „-0,08 (-0,04%)”,
"ALTE DETALII": {
„PREV_CLOSE”: „198,95”,
„DESCHIS”: „199.20”,
„BID”: „198,91 x 800”,
„ASK”: „198,99 x 1000”,
„TD_VOLUME”: „27.760.668”,
„AVERAGE_VOLUME_3MONTH”: „28.641.896”,
„MARKET_CAP”: „937.728B”,
„BETA_3Y”: „0,91”,
„PE_RATIO”: „16.41”,
„EPS_RATIO”: „12.12”,
„EARNINGS_DATE”: [
„30 aprilie 2019”
],
„DIVIDEND_AND_YIELD”: „2,92 (1,50%)”,
„EX_DIVIDEND_DATE”: „2019-02-08”,
„ONE_YEAR_TARGET_PRICE”: „193,12”
}
}
[/cod]
Puteți face același lucru cu orice număr de companii doriți și de câte ori doriți să rămâneți la curent.
2. Codul crawlerului explicat
Ca și codurile anterioare de web scraping, și în acesta, am obținut mai întâi întregul fișier HTML. De aici, am identificat etichetele specifice (cu anumite clase) care aveau datele de care aveam nevoie. Acest pas a fost făcut manual pentru o singură pagină de detalii a companiei. Odată ce etichetele specifice și clasele lor respective au fost identificate, am folosit o supă frumoasă pentru a scoate acele etichete, folosind codul nostru.
Apoi, din fiecare dintre aceste etichete, am copiat datele necesare într-o variabilă numită company_json. Acesta este json-ul pe care l-am scris în cele din urmă într-un fișier de tip JSON numit data.json. Puteți vedea că am salvat și HTML-ul răzuit într-un fișier numit output_file.html în memoria dvs. locală. Acest lucru se face astfel încât să puteți analiza singur pagina HTML și să veniți cu alte tehnici python de scraping de date pentru a accesa cu crawlere mai multe date.
3. Câteva date importante pe care le-am capturat
- PREV_CLOSE: se referă la prețul de închidere al unei acțiuni în ziua anterioară de tranzacționare. Valoarea unei acțiuni din ziua anterioară se referă numai la ultimul preț de închidere într-o zi în care bursa a fost deschisă (nu sărbătorile).
- DESCHIS: Prețul de deschidere, referit și la Deschide, pe scurt, este prețul de pornire al unei acțiuni într-o zi de tranzacționare. De exemplu, prețul de deschidere pentru orice bursă de pe Bursa de Valori din New York (NYSE) ar fi prețul acesteia la 9:30 dimineața, ora estului.
- BID & ASK: Ambele prețuri sunt cotații pe o singură acțiune din acțiuni. Oferta se referă la prețul pe care cumpărătorii sunt dispuși să-l plătească pentru el, în timp ce cererea este pentru ce sunt dispuși vânzătorii să-l vândă. Multiplicatorul se referă la numărul de acțiuni aflate în curs de tranzacționare la prețurile respective.
- TD_VOLUME: Este pur și simplu numărul de acțiuni care și-au schimbat mâinile în timpul zilei.
- PE_RATIO: Probabil cel mai important factor pe care investitorii îl analizează, este calculat prin împărțirea prețului actual de piață al acțiunilor unei companii la câștigul pe acțiune al companiei. Pur și simplu, este suma de bani pe care cineva este gata să o plătească pentru fiecare rupie din câștigurile companiei.
Motivul pentru care am explicat unele dintre punctele importante de date este că doream să știți cât de adânc vă puteți scufunda în situația financiară a unei companii, doar prin răzuirea datelor de pe pagina sa Yahoo Finance.
Ce date puteți accesa cu crawlere din Yahoo Finance?
Veți putea accesa cu crawlere diferite puncte de date folosind acest scraper Python. Valoarea actuală și procentul actual de creștere sau scădere sunt de cea mai mare importanță. Celelalte puncte de date, atunci când sunt privite împreună, prezintă o imagine mai bună și vă ajută să decideți dacă investiția în acțiunile unei companii ar fi o idee bună sau nu. Privirea unui instantaneu al datelor s-ar putea să nu se dovedească prea eficientă. Recuperarea datelor la intervale regulate și utilizarea unui set mare de date pentru a prezice prețurile viitoare ale acțiunilor s-ar putea dovedi mai utilă pe termen lung.
Ce alte date financiare puteți accesa cu crawlere?
Datele financiare pe care le-am răzuit sunt din pagina de rezumat a unei companii din Yahoo Finance. Fiecare companie are, de asemenea, o pagină de diagramă, unde puteți vedea datele stocurilor pentru până la cinci ani. Deși datele nu sunt tocmai foarte structurate, posibilitatea de a le accesa cu crawlere vă poate oferi o perspectivă foarte bună asupra performanței istorice a acțiunilor unei companii.
Pagina de statistici vă oferă mai mult de treizeci de puncte de date diferite, peste cele pe care le-am capturat. Acestea sunt într-un format structurat și pot fi răzuite folosind un cod similar cu cel oferit de noi.
Datele istorice conțin date din pagina diagramei, dar într-un format similar cu un CSV - puteți extrage cu ușurință datele și le puteți stoca într-un CSV. Alte pagini cum ar fi profil, financiar, analiză, opțiuni, deținători și sustenabilitate vă pot oferi o estimare bună a modului în care vor funcționa acțiunile companiei în comparație cu concurenții săi.
Cazuri folosite de Yahoo Finance Data
Puteți utiliza datele istorice pentru a prezice prețurile acțiunilor sau puteți crea o aplicație care utilizează date actualizate în mod regulat din motorul dvs. de scraping pentru a oferi actualizări utilizatorilor. Puteți recomanda când cineva ar trebui să-și vândă acțiunile sau când ar trebui să cumpere mai multe - posibilitățile sunt nesfârșite!
În cazul în care aveți o echipă mică și nu puteți decide cum să începeți cu web scraping, puteți beneficia de ajutorul unei echipe de web scraping dedicate și cu experiență precum PromptCloud. Tabloul nostru de bord de colectare a cerințelor web scraping face ca trimiterea cerințelor, obținerea unei cotații și, în final, obținerea datelor într-un format plug and play să fie un proces simplu și simplu.
Aveți nevoie de ajutor pentru extragerea datelor web?
Obțineți date curate și gata de utilizare de pe site-uri web pentru aplicații de afaceri prin serviciile noastre de web scraping.
Hopa! Nu am putut găsi formularul dvs.
Disclaimer: Codul furnizat în acest tutorial este doar în scop de învățare. Nu suntem responsabili pentru modul în care este utilizat și nu ne asumăm nicio răspundere pentru orice utilizare dăunătoare a codului sursă.
