Apprenez à extraire des données financières à l'aide de Python
Publié: 2019-04-26La bourse est une énorme base de données avec des millions d'entrées qui sont mises à jour chaque seconde. Bien qu'il existe de nombreuses entreprises qui fournissent des données financières sur les entreprises, c'est généralement via une API (interface de programmation d'application). Et comme vous l'avez peut-être deviné, ces API ne sont jamais gratuites. Yahoo Finance est une source fiable de données boursières et dispose d'une API payante. Nous vous guiderons dans un processus étape par étape sur la façon de récupérer les données Yahoo Finance à l'aide de Python.
Pourquoi explorer les données de Yahoo Finance ?
Si vous avez besoin de données financières gratuites et propres provenant d'une source fiable, Yahoo Finance est votre meilleur pari. Les pages Web de profil d'entreprise sont construites dans une structure uniforme, ce qui facilite le grattage Web en python. Si vous écrivez un script pour explorer les données de la page financière de Microsoft, le même script pourrait également être utilisé pour explorer les données de la page financière d'Apple.
Comment Web Scraper des données financières avec Python ?
Pour l'installation et la mise en route, vous pouvez vous référer aux étapes de base de cet article sur le grattage de données python , où nous avons expliqué comment explorer les données d'un portail de réservation d'hôtel de premier plan. Une fois que vous avez installé toutes les dépendances avec l'éditeur de code Atom, commençons par gratter Yahoo Finance avec Python.
1. Commencez avec le code pour scraper avec Python
Une fois les étapes d'installation et de configuration terminées, nous pouvons entrer directement dans le code et démarrer Yahoo Finance Scraping. Le code est donné plus loin ci-dessous et peut être exécuté en utilisant uniquement la commande Python.

Vous pouvez exécuter le code de la manière indiquée ci-dessus. Lorsque vous y êtes invité, entrez simplement l'URL de l'entreprise dont vous souhaitez vérifier le résumé financier. Nous avons utilisé le lien pour Microsoft.
[langage de code = "python"]
#!/usr/bin/python
# -*- codage : utf-8 -*-
importer urllib.request
importer urllib.parse
import urllib.error
depuis bs4 importer BeautifulSoup
importer SSL
importer json
importer ast
importer le système d'exploitation
à partir de urllib.request demande d'importation, urlopen
# Pour ignorer les erreurs de certificat SSL
ctx = ssl.create_default_context()
ctx.check_hostname=Faux
ctx.verify_mode = ssl.CERT_NONE
# Entrée de l'utilisateur
url = input('Entrez l'URL de la société Yahoo Finance- ')
# Faire croire au site Web que vous y accédez à l'aide d'un navigateur Mozilla
req = Request(url, headers={'User-Agent': 'Mozilla/5.0'})
page Web = urlopen(req).read()
# Création d'un objet BeautifulSoup de la page HTML pour une extraction facile des données.
soupe = BeautifulSoup(page web, 'html.parser')
html = soup.prettify('utf-8')
company_json = {}
autres_détails = {}
pour span dans 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)'}):
pour span dans div.findAll('span', recursive=False):
company_json['PRESENT_GROWTH'] = span.text.strip()
pour td dans soup.findAll('td', attrs={'data-test': 'PREV_CLOSE-value'}):
pour span dans td.findAll('span', recursive=False):
other_details['PREV_CLOSE'] = span.text.strip()
pour td dans soup.findAll('td', attrs={'data-test': 'OPEN-value'}):
pour span dans td.findAll('span', recursive=False):
other_details['OPEN'] = span.text.strip()
pour td dans soup.findAll('td', attrs={'data-test': 'BID-value'}):
pour span dans td.findAll('span', recursive=False):
other_details['BID'] = span.text.strip()
pour td dans soup.findAll('td', attrs={'data-test': 'ASK-value'}):
pour span dans td.findAll('span', recursive=False):
other_details['ASK'] = span.text.strip()
pour td dans soup.findAll('td', attrs={'data-test': 'DAYS_RANGE-value'}):
pour span dans td.findAll('span', recursive=False):
other_details['DAYS_RANGE'] = span.text.strip()
pour td dans soup.findAll('td',
attrs={'data-test': 'FIFTY_TWO_WK_RANGE-value'}):
pour span dans td.findAll('span', recursive=False):
other_details['FIFTY_TWO_WK_RANGE'] = span.text.strip()
pour td dans soup.findAll('td', attrs={'data-test': 'TD_VOLUME-value'}):
pour span dans td.findAll('span', recursive=False):
other_details['TD_VOLUME'] = span.text.strip()
pour td dans soup.findAll('td',
attrs={'data-test' : 'AVERAGE_VOLUME_3MONTH-value'
}):
pour span dans td.findAll('span', recursive=False):
other_details['AVERAGE_VOLUME_3MONTH'] = span.text.strip()
pour td dans soup.findAll('td', attrs={'data-test': 'MARKET_CAP-value'}):
pour span dans td.findAll('span', recursive=False):
other_details['MARKET_CAP'] = span.text.strip()
pour td dans soup.findAll('td', attrs={'data-test': 'BETA_3Y-value'}):
pour span dans td.findAll('span', recursive=False):
other_details['BETA_3Y'] = span.text.strip()
pour td dans soup.findAll('td', attrs={'data-test': 'PE_RATIO-value'}):
pour span dans td.findAll('span', recursive=False):
other_details['PE_RATIO'] = span.text.strip()
pour td dans soup.findAll('td', attrs={'data-test': 'EPS_RATIO-value'}):
pour span dans td.findAll('span', recursive=False):
other_details['EPS_RATIO'] = span.text.strip()
pour td dans soup.findAll('td', attrs={'data-test' : 'EARNINGS_DATE-value'
}):
other_details['EARNINGS_DATE'] = []
pour span dans td.findAll('span', recursive=False):
other_details['EARNINGS_DATE'].append(span.text.strip())
pour td dans soup.findAll('td',
attrs={'data-test': 'DIVIDEND_AND_YIELD-value'}):
other_details['DIVIDEND_AND_YIELD'] = td.text.strip()
pour td dans soup.findAll('td',
attrs={'data-test': 'EX_DIVIDEND_DATE-value'}):
pour span dans td.findAll('span', recursive=False):
other_details['EX_DIVIDEND_DATE'] = span.text.strip()
pour td dans soup.findAll('td',
attrs={'data-test' : 'ONE_YEAR_TARGET_PRICE-value'
}):
pour span dans td.findAll('span', recursive=False):
other_details['ONE_YEAR_TARGET_PRICE'] = span.text.strip()
company_json['OTHER_DETAILS'] = other_details
avec open('data.json', 'w') comme fichier de sortie :
json.dump(company_json, outfile, indent=4)
société d'impression_json
avec open('output_file.html', 'wb') comme fichier :
fichier.write(html)
print '———-L'extraction des données est terminée. Vérifiez le fichier json.———-'

[/code]
Une fois que vous avez exécuté le code et entré une URL d'entreprise, vous verrez un json imprimé sur votre terminal. Ce json sera également enregistré dans un fichier nommé "data.json" dans votre dossier. Pour Microsoft, nous avons obtenu le JSON suivant.
[langage de code = "python"]
{
"PRESENT_GROWTH": "+1,31 (+0,67%)",
"PRESENT_VALUE": "197.00",
"PREV_CLOSE": "195.69",
"OUVERT": "196.45",
« ENCHÈRE » : « 196,89 x 900 »,
"DEMANDER": "197.00 x 1400",
"TD_VOLUME": "18 526 644",
"VOLUME_MOYEN_3MOIS": "29 962 082",
« MARKET_CAP » : « 928.91B »,
"BETA_3Y": "0.91",
"PE_RATIO": "16.25",
"EPS_RATIO": "12.12",
"GAINS_DATE" : [
"30 avril 2019"
],
"DIVIDEND_AND_YIELD": "2,92 (1,50%)",
"EX_DIVIDEND_DATE": "2019-02-08",
« ONE_YEAR_TARGET_PRICE » : « 190,94 »
}
[/code]
Pour Apple, qui a subi plusieurs pertes ces derniers temps, le JSON ressemblait à ceci.
[langage de code = "python"]
{
"PRESENT_VALUE": "198.87",
"PRESENT_GROWTH": "-0,08 (-0,04%)",
"AUTRES DÉTAILS": {
"PREV_CLOSE": "198.95",
"OUVERT": "199.20",
« ENCHÈRE » : « 198,91 x 800 »,
« DEMANDER » : « 198,99 x 1000 »,
"TD_VOLUME": "27 760 668",
"VOLUME_MOYEN_3MOIS": "28 641 896",
« MARKET_CAP » : « 937.728B »,
"BETA_3Y": "0.91",
"PE_RATIO": "16.41",
"EPS_RATIO": "12.12",
"GAINS_DATE" : [
“30 avril 2019”
],
"DIVIDEND_AND_YIELD": "2,92 (1,50%)",
"EX_DIVIDEND_DATE": "2019-02-08",
« ONE_YEAR_TARGET_PRICE » : « 193,12 »
}
}
[/code]
Vous pouvez faire la même chose avec le nombre d'entreprises que vous souhaitez et aussi souvent que vous le souhaitez pour rester à jour.
2. Le code du robot expliqué
Comme les codes de grattage Web précédents, dans celui-ci également, nous avons d'abord obtenu le fichier HTML complet. À partir de là, nous avons identifié les balises spécifiques (avec des classes spécifiques) contenant les données dont nous avions besoin. Cette étape a été effectuée manuellement pour une seule page de détails de l'entreprise. Une fois les balises spécifiques et leurs classes respectives identifiées, nous avons utilisé une belle soupe pour sortir ces balises, en utilisant notre code.
Ensuite, à partir de chacune de ces balises, nous avons copié les données nécessaires dans une variable appelée company_json. C'est le json que nous avons finalement écrit dans un fichier de type JSON appelé data.json. Vous pouvez voir que nous avons également enregistré le code HTML extrait dans un fichier appelé output_file.html dans votre mémoire locale. Ceci est fait pour que vous puissiez analyser la page HTML vous-même et proposer d'autres techniques de grattage de données en python pour explorer plus de données.
3. Quelques points de données importants que nous avons capturés
- PREV_CLOSE : Il fait référence au cours de clôture d'une action le jour de négociation précédent. La valeur du jour précédent d'une action se réfère uniquement au dernier cours de clôture d'un jour où le marché boursier était ouvert (pas les jours fériés).
- OPEN : Le cours d'ouverture, également appelé Open, est le prix de départ d'une action un jour de bourse. Par exemple, le cours d'ouverture de n'importe quel marché boursier à la Bourse de New York (NYSE) serait son cours à 9 h 30, heure de l'Est.
- BID & ASK: Les deux prix sont des cotations sur une seule action du stock. L'enchère fait référence au prix que les acheteurs sont prêts à payer, tandis que la demande correspond au prix auquel les vendeurs sont prêts à le vendre. Le multiplicateur fait référence au nombre d'actions en attente de négociation à leurs prix respectifs.
- TD_VOLUME : C'est simplement le nombre d'actions qui ont changé de mains au cours de la journée.
- PE_RATIO : Probablement le facteur le plus important sur lequel les investisseurs se penchent, il est calculé en divisant le cours actuel du marché des actions d'une entreprise par le bénéfice par action de l'entreprise. En termes simples, il s'agit de la somme d'argent que l'on est prêt à payer pour chaque roupie des bénéfices de l'entreprise.
La raison pour laquelle nous avons expliqué certains des points de données importants est que nous voulions que vous sachiez à quel point vous pouvez plonger dans les finances d'une entreprise, simplement en extrayant les données de sa page Yahoo Finance.
Quelles données pouvez-vous explorer à partir de Yahoo Finance ?
Vous pourrez explorer différents points de données à l'aide de ce scraper Python. La valeur actuelle et le pourcentage de croissance ou de chute actuel sont de la plus haute importance. Les autres points de données, lorsqu'ils sont considérés ensemble, présentent une meilleure image et aident à décider si investir dans les actions d'une entreprise serait une bonne idée ou non. Cependant, regarder un instantané des données peut ne pas s'avérer très efficace. Le grattage des données à intervalles réguliers et l'utilisation d'un grand ensemble de données pour prédire les prix futurs des actions pourraient s'avérer plus utiles à long terme.
Quelles autres données financières pouvez-vous explorer ?
Les données financières que nous avons extraites proviennent de la page de résumé d'une entreprise dans Yahoo Finance. Chaque entreprise dispose également d'une page graphique, où vous pouvez voir les données boursières jusqu'à cinq ans. Bien que les données ne soient pas exactement très structurées, le fait de pouvoir les explorer peut vous donner un très bon aperçu de la performance historique des actions d'une entreprise.
La page de statistiques vous donne plus de trente points de données différents, en plus de ceux que nous avons capturés. Ceux-ci sont dans un format structuré et peuvent être extraits à l'aide d'un code similaire à celui que nous avons fourni.
Les données historiques contiennent des données de la page de graphique, mais dans un format similaire à un CSV - vous pouvez facilement extraire les données et les stocker dans un CSV. D'autres pages comme le profil, les finances, l'analyse, les options, les détenteurs et la durabilité peuvent vous donner une bonne estimation de la performance des actions de l'entreprise par rapport à ses concurrents.
Cas d'utilisation de Yahoo Finance Data
Vous pouvez utiliser les données historiques pour prédire les prix des actions, ou vous pouvez créer une application qui utilise des données régulièrement mises à jour à partir de votre moteur de grattage pour fournir des mises à jour aux utilisateurs. Vous pouvez recommander quand vendre ses actions ou quand acheter plus – les possibilités sont infinies !
Si vous avez une petite équipe et que vous ne pouvez pas décider comment vous lancer dans le scraping Web, vous pouvez faire appel à une équipe de scraping Web engagée et expérimentée comme PromptCloud. Notre tableau de bord de collecte des exigences de grattage Web permet de soumettre des exigences, d'obtenir un devis et enfin d'obtenir les données dans un format plug and play en un processus simple et direct.
Besoin d'aide pour extraire des données Web ?
Obtenez des données propres et prêtes à l'emploi à partir de sites Web pour des applications professionnelles grâce à nos services de grattage Web.
Oops! Nous ne pouvions pas trouver votre formulaire.
Avis de non-responsabilité : le code fourni dans ce didacticiel est uniquement à des fins d'apprentissage. Nous ne sommes pas responsables de la façon dont il est utilisé et n'assumons aucune responsabilité pour toute utilisation préjudiciable du code source.
