Impara a raschiare i dati finanziari usando Python
Pubblicato: 2019-04-26Il mercato azionario è un enorme database con milioni di voci che vengono aggiornate ogni singolo secondo. Sebbene ci siano molte aziende che forniscono dati finanziari delle aziende, di solito è tramite un'API (interfaccia di programmazione dell'applicazione). E come avrai intuito, queste API non sono mai gratuite. Yahoo Finance è una fonte affidabile di dati sul mercato azionario e dispone di un'API a pagamento. Ti guideremo in un processo passo dopo passo su come raschiare i dati di Yahoo Finance utilizzando Python.
Perché eseguire la scansione dei dati da Yahoo Finance?
Se hai bisogno di dati finanziari gratuiti e puliti da una fonte attendibile, Yahoo Finance è la soluzione migliore. Le pagine web del profilo aziendale sono costruite in una struttura uniforme, rendendo facile lo scraping del web python. Se scrivi uno script per eseguire la scansione dei dati dalla pagina finanziaria di Microsoft, lo stesso script potrebbe essere utilizzato anche per eseguire la scansione dei dati dalla pagina finanziaria di Apple.
Come eseguire il web scraping dei dati finanziari utilizzando Python?
Per l'installazione e per iniziare, puoi fare riferimento ai passaggi di base di questo articolo sullo scraping dei dati python , in cui abbiamo discusso su come eseguire la scansione dei dati da un importante portale di prenotazione di hotel. Dopo aver installato tutte le dipendenze insieme all'editor di codice Atom, iniziamo con lo scraping di Yahoo Finance con Python.
1. Inizia con il codice per lo scraping con Python
Una volta completate le fasi di installazione e configurazione, possiamo accedere direttamente al codice e avviare Yahoo Finance Scraping. Il codice è riportato più avanti e può essere eseguito utilizzando solo il comando Python.

È possibile eseguire il codice nel modo mostrato sopra. Quando richiesto, è sufficiente inserire l'URL dell'azienda di cui si desidera controllare il riepilogo finanziario. Abbiamo usato il collegamento per Microsoft.
[lingua del codice =”python”]
#!/usr/bin/python
# -*- codifica: utf-8 -*-
import urllib.request
importa urllib.parse
import urllib.error
da bs4 importa BeautifulSoup
importazione ssl
importa json
importare ast
importare os
da urllib.request import Request, urlopen
# Per ignorare gli errori del certificato SSL
ctx = ssl.create_default_context()
ctx.check_hostname = Falso
ctx.verify_mode = ssl.CERT_NONE
# Input dell'utente
url = input('Enter Yahoo Finance Company Url-')
# Far credere al sito Web che stai accedendo utilizzando un browser Mozilla
req = Richiesta(url, headers={'User-Agent': 'Mozilla/5.0'})
pagina web = urlopen(req).read()
# Creazione di un oggetto BeautifulSoup della pagina HTML per una facile estrazione dei dati.
zuppa = BeautifulSoup(pagina web, 'html.parser')
html = zuppa.pretify('utf-8')
azienda_json = {}
altri_dettagli = {}
for 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()
for div in soup.findAll('div', attrs={'class': 'D(ib) Va(t)'}):
for span in div.findAll('span', recursive=False):
company_json['PRESENT_GROWTH'] = span.text.strip()
for td in soup.findAll('td', attrs={'data-test': 'PREV_CLOSE-value'}):
for span in td.findAll('span', ricorsive=False):
altri_dettagli['PREV_CLOSE'] = span.text.strip()
for td in soup.findAll('td', attrs={'data-test': 'OPEN-value'}):
for span in td.findAll('span', ricorsive=False):
altri_dettagli['APERTO'] = span.text.strip()
for td in soup.findAll('td', attrs={'data-test': 'BID-value'}):
for span in td.findAll('span', ricorsive=False):
altri_dettagli['BID'] = span.text.strip()
for td in soup.findAll('td', attrs={'data-test': 'ASK-value'}):
for span in td.findAll('span', ricorsive=False):
altri_dettagli['CHIEDI'] = span.text.strip()
for td in soup.findAll('td', attrs={'data-test': 'DAYS_RANGE-value'}):
for span in td.findAll('span', ricorsive=False):
other_details['DAYS_RANGE'] = span.text.strip()
for td in soup.findAll('td',
attrs={'test-dati': 'FIFTY_TWO_WK_RANGE-value'}):
for span in td.findAll('span', ricorsive=False):
altri_dettagli['CINQUANTA_TWO_WK_RANGE'] = span.text.strip()
for td in soup.findAll('td', attrs={'data-test': 'TD_VOLUME-value'}):
for span in td.findAll('span', ricorsive=False):
altri_dettagli['TD_VOLUME'] = span.text.strip()
for td in soup.findAll('td',
attrs={'test-dati': 'VALORE_MEDIA_VOLUME_3MESE'
}):
for span in td.findAll('span', ricorsive=False):
altri_dettagli['VOLUME_MEDIA_3MESE'] = span.text.strip()
for td in soup.findAll('td', attrs={'data-test': 'MARKET_CAP-value'}):
for span in td.findAll('span', ricorsive=False):
altri_dettagli['MARKET_CAP'] = span.text.strip()
for td in soup.findAll('td', attrs={'data-test': 'BETA_3Y-value'}):
for span in td.findAll('span', ricorsive=False):
altri_dettagli['BETA_3Y'] = span.text.strip()
for td in soup.findAll('td', attrs={'data-test': 'PE_RATIO-value'}):
for span in td.findAll('span', ricorsive=False):
altri_dettagli['PE_RATIO'] = span.text.strip()
for td in soup.findAll('td', attrs={'data-test': 'EPS_RATIO-value'}):
for span in td.findAll('span', ricorsive=False):
altri_dettagli['EPS_RATIO'] = span.text.strip()
for td in soup.findAll('td', attrs={'data-test': 'EARNINGS_DATE-value'
}):
altri_dettagli['EARNINGS_DATE'] = []
for span in td.findAll('span', ricorsive=False):
other_details['EARNINGS_DATE'].append(span.text.strip())
for td in soup.findAll('td',
attrs={'test-dati': 'DIVIDEND_AND_YIELD-value'}):
other_details['DIVIDEND_AND_YIELD'] = td.text.strip()
for td in soup.findAll('td',
attrs={'test-dati': 'valore-EX_DIVIDEND_DATE'}):
for span in td.findAll('span', ricorsive=False):
altri_dettagli['EX_DIVIDEND_DATE'] = span.text.strip()
for td in soup.findAll('td',
attrs={'test-dati': 'ONE_YEAR_TARGET_PRICE-value'
}):
for span in td.findAll('span', ricorsive=False):
altri_dettagli['ONE_YEAR_TARGET_PRICE'] = span.text.strip()
company_json['OTHER_DETAILS'] = altri_dettagli
con open('data.json', 'w') come file di uscita:
json.dump(company_json, outfile, indent=4)
print company_json
con open('output_file.html', 'wb') come file:
file.scrivi(html)
print '———-Estrazione dei dati completata. Controlla il file json.———-'

[/codice]
Dopo aver eseguito il codice e inserito l'URL di un'azienda, vedrai un json stampato sul tuo terminale. Questo json verrà anche salvato in un file con il nome "data.json" nella tua cartella. Per Microsoft, abbiamo ottenuto il seguente JSON.
[lingua del codice =”python”]
{
“PRESENT_GROWTH”: “+1,31 (+0,67%)”,
“VALORE_PRESENTE”: “197.00”,
“PREV_CLOSE”: “195.69”,
“APERTO”: “196.45”,
“OFFERTA”: “196,89 x 900”,
“CHIEDI”: “197.00 x 1400”,
“TD_VOLUME”: “18.526.644”,
"VOLUME_MEDIA_3MESE": "29.962.082",
“MERCATO_CAP”: “928.91B”,
"BETA_3Y": "0,91",
“PE_RATIO”: “16.25”,
“RAPPORTO_EPS”: “12.12”,
“DATA_GUADAGNO”: [
“30 aprile 2019”
],
"DIVIDEND_AND_YIELD": "2,92 (1,50%)",
"EX_DIVIDEND_DATE": "08-02-2019",
"UN_YEAR_TARGET_PRICE": "190,94"
}
[/codice]
Per Apple, che negli ultimi tempi ha subito più perdite, il JSON era simile a questo.
[lingua del codice =”python”]
{
“VALORE_PRESENTE”: “198.87”,
“PRESENT_GROWTH”: “-0,08 (-0,04%)”,
"ALTRI DETTAGLI": {
“PREV_CLOSE”: “198.95”,
“APERTO”: “199.20”,
“OFFERTA”: “198,91 x 800”,
“CHIEDI”: “198,99 x 1000”,
“TD_VOLUME”: “27.760.668”,
"VOLUME_MEDIA_3MESE": "28.641.896",
“MERCATO_CAP”: “937.728B”,
"BETA_3Y": "0,91",
“PE_RATIO”: “16.41”,
“RAPPORTO_EPS”: “12.12”,
“DATA_GUADAGNO”: [
“30 aprile 2019”
],
"DIVIDEND_AND_YIELD": "2,92 (1,50%)",
"EX_DIVIDEND_DATE": "08-02-2019",
“UN_YEAR_TARGET_PRICE”: “193.12”
}
}
[/codice]
Puoi fare lo stesso con qualsiasi numero di aziende che desideri e tutte le volte che vuoi rimanere aggiornato.
2. Spiegazione del codice crawler
Come i precedenti codici di web scraping, anche in questo abbiamo prima ottenuto l'intero file HTML. Da ciò, abbiamo identificato i tag specifici (con classi specifiche) che contenevano i dati di cui avevamo bisogno. Questo passaggio è stato eseguito manualmente per una singola pagina dei dettagli dell'azienda. Una volta identificati i tag specifici e le rispettive classi, abbiamo usato una bella zuppa per estrarre quei tag, usando il nostro codice.
Quindi da ciascuno di questi tag, abbiamo copiato i dati necessari in una variabile chiamata company_json. Questo è il json che alla fine abbiamo scritto in un file di tipo JSON chiamato data.json. Puoi vedere che abbiamo anche salvato l'HTML raschiato in un file chiamato output_file.html nella tua memoria locale. Questo viene fatto in modo che tu possa analizzare tu stesso la pagina HTML e trovare altre tecniche di python per lo scraping dei dati per eseguire la scansione di più dati.
3. Alcuni punti dati importanti che abbiamo acquisito
- PREV_CLOSE: Si riferisce al prezzo di chiusura di un'azione il giorno precedente di negoziazione. Il valore del giorno precedente di un'azione si riferisce solo all'ultimo prezzo di chiusura in un giorno in cui il mercato azionario era aperto (non festivi).
- OPEN: Il prezzo di apertura denominato anche Open in breve, è il prezzo di partenza di un'azione in un giorno di negoziazione. Ad esempio, il prezzo di apertura di qualsiasi mercato azionario della Borsa di New York (NYSE) sarebbe il prezzo alle 9:30 ora orientale.
- BID & ASK: entrambi i prezzi sono quotazioni su una singola azione del titolo. L'offerta si riferisce al prezzo che gli acquirenti sono disposti a pagare per questo, mentre la domanda è ciò per cui i venditori sono disposti a venderlo. Il moltiplicatore si riferisce al numero di azioni in attesa di negoziazione ai rispettivi prezzi.
- TD_VOLUME: È semplicemente il numero di azioni che sono passate di mano durante la giornata.
- PE_RATIO: Probabilmente il singolo fattore più importante che gli investitori esaminano, è calcolato dividendo il prezzo di mercato corrente delle azioni di una società per l'utile per azione della società. In poche parole è la somma di denaro che uno è pronto a pagare per ogni rupia dei guadagni dell'azienda.
Il motivo per cui abbiamo spiegato alcuni dei dati importanti è che volevamo che tu sapessi quanto puoi immergerti nei dati finanziari di un'azienda, semplicemente estraendo i dati dalla sua pagina Yahoo Finance.
Quali dati puoi scansionare da Yahoo Finance?
Sarai in grado di eseguire la scansione di diversi punti dati usando questo raschietto Python. Il valore attuale e la percentuale di crescita o diminuzione attuale sono della massima importanza. Gli altri punti dati, se visti insieme, presentano un quadro migliore e aiutano a decidere se investire nelle azioni di una società sarebbe una buona idea o meno. Tuttavia, guardare un'istantanea dei dati potrebbe non rivelarsi troppo efficace. Raschiare i dati a intervalli regolari e utilizzare un grande set di dati per prevedere i prezzi futuri delle azioni potrebbe rivelarsi più utile a lungo termine.
Quali altri dati finanziari puoi scansionare?
I dati finanziari che abbiamo raschiato provengono dalla pagina di riepilogo di una società in Yahoo Finance. Ogni azienda ha anche una pagina del grafico, dove puoi vedere i dati sulle azioni per un massimo di cinque anni. Sebbene i dati non siano esattamente molto strutturati, essere in grado di scansionarli potrebbe darti un'ottima visione della performance storica delle azioni di un'azienda.
La pagina delle statistiche ti fornisce più di trenta diversi punti dati, oltre a quelli che abbiamo catturato. Questi sono in un formato strutturato e possono essere raschiati utilizzando un codice simile a quello che abbiamo fornito.
I dati storici contengono dati dalla pagina del grafico, ma in un formato simile a un CSV: puoi facilmente estrarre i dati e archiviarli in un CSV. Altre pagine come profilo, dati finanziari, analisi, opzioni, titolari e sostenibilità potrebbero darti una buona stima delle prestazioni delle azioni della società rispetto ai suoi concorrenti.
Casi usati di Yahoo Finance Data
Puoi utilizzare i dati storici per prevedere i prezzi delle azioni oppure puoi creare un'applicazione che utilizzi i dati regolarmente aggiornati dal tuo motore di scraping per fornire aggiornamenti agli utenti. Puoi consigliare quando si dovrebbero vendere le proprie azioni o quando dovrebbero acquistarne di più: le possibilità sono infinite!
Nel caso in cui tu abbia un piccolo team e non riesci a decidere come iniziare con lo scraping web, puoi avvalerti dell'aiuto di un team di scraping web impegnato ed esperto come PromptCloud. La nostra dashboard per la raccolta dei requisiti di scraping web rende l'invio dei requisiti, l'ottenimento di un preventivo e, infine, l'ottenimento dei dati in un formato plug and play un processo semplice e diretto.
Hai bisogno di aiuto con l'estrazione dei dati web?
Ottieni dati puliti e pronti per l'uso da siti Web per applicazioni aziendali tramite i nostri servizi di scraping web.
Ops! Non siamo riusciti a individuare il tuo modulo.
Dichiarazione di non responsabilità: il codice fornito in questo tutorial è solo a scopo didattico. Non siamo responsabili per come viene utilizzato e non ci assumiamo alcuna responsabilità per qualsiasi utilizzo dannoso del codice sorgente.
