Étant donné le ticker ou le nom d'une entreprise, j'aimerais obtenir son secteur en utilisant python.
J'ai déjà essayé plusieurs solutions potentielles mais aucune n'a fonctionné avec succès p>
Les deux plus prometteurs sont:
1) Utilisation du script de: https://gist.github.com/pratapvardhan/9b57634d57f21cf3874c
tree.xpath("//a[@id='sector']")[0].text, tree.xpath("//a[@id='sector']")[0].getnext().text
Cependant j'utilise python - version 3.8
J'ai pu peaufiner cette solution, mais la dernière ligne ne fonctionne pas et je suis complètement nouveau dans le scraping de pages Web, donc j'apprécierais si quelqu'un a des suggestions.
Ici est mon code actuel:
from urllib.request import Request, urlopen from lxml.html import parse name="IBM" req = Request('http://www.google.com/finance?&q='+name, headers={'User-Agent': 'Mozilla/5.0'}) webpage = urlopen(req) tree = parse(webpage)
Mais alors la dernière partie ne fonctionne pas et je suis très nouveau dans cette syntaxe xpath
:
XXX
2) L'autre option consistait à intégrer le package TTN
de R
comme indiqué ici: Trouver le secteur auquel appartient une action
Cependant, je veux l'exécuter dans mon notebook Jupyter, et il faut juste des années pour exécuter ss
3 Réponses :
Suite à votre commentaire , pour marketwatch.com/investing/stock plus précisément , le xpath susceptible de fonctionner est "// div [@ class = 'intraday__sector'] / span [@ class = ' label '] "
signifiant que faire
tree.xpath("//div[@class='intraday__sector']/span[@class='label']")[0].text
doit renvoyer les informations souhaitées.
Je suis complètement novice dans le scraping de pages Web [...]
Quelques précisions:
"// a [@ id = 'sector']"
dans la page que vous mentionnez dans les commentaires , puisque cet xpath (désormais obsolète) était spécifique à google-finance. En d'autres termes, vous devez d'abord "étudier" la page qui vous intéresse pour savoir où se trouvent les informations souhaitées. $ x ()
où la fonction $ x
est documentée ici (avec des exemples!).
Cet tree.xpath ("// div [@ class = 'intraday__sector'] / span [@ class = 'la bel']")
donne une liste
vide. A partir de la variable tree
générée avec le code de la question à l'aide du site google.
@alejandro Un xpath qui fonctionne pour un site Web donné ne fonctionnera pas pour un autre site Web. Celui-ci fonctionne pour marketwatch.com/investing/stock . Voir la mise à jour.
oui, j'ai pensé, mais quand j'ai essayé de le faire pour ce site Web, j'obtiens l'erreur suivante: HTTPError: HTTP Error 405: Method Not Allowed
. Ce qui semble être lié à la partie urlopen
du code.
@al notez que l'erreur 405 est indépendante du sujet principal de votre message. Cela étant dit, avez-vous vu ça ?
J'étais en train de le regarder;) OK, je vais continuer à dépanner alors! Merci pour votre gentille réponse jusqu'à présent, une fois que j'en aurai terminé, j'accepterai si tout fonctionne correctement.
Pour répondre à la question:
Comment obtenir le secteur des sociétés boursières à partir du ticker ou du nom de la société en python?
J'ai dû trouver un travail après avoir lu quelques matériel et quelques suggestions intéressantes de @keepAlive.
Ce qui suit fait le travail de manière inverse, c'est-à-dire obtient les entreprises du secteur. Il y a 10 secteurs, donc ce n'est pas trop de travail si l'on veut des infos pour tous les secteurs: https: // www .stockmonitor.com / secteurs /
Étant donné que marketwatch.com/investing/stock envoyait une erreur 405, j'ai décidé d'utiliser https://www.stockmonitor.com/sectors/ , par exemple:
https://www.stockmonitor.com/sector/healthcare/
Voici le code:
healthcare_tickers = [] for element in tree.xpath("//tbody/tr/td[@class='text-left']/a"): healthcare_tickers.append(element.text) pd.Series(healthcare_tickers)
import requests import pandas as pd from lxml.html import parse from urllib.request import Request, urlopen headers = [ "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_3)" + " " "AppleWebKit/537.36 (KHTML, like Gecko)" + " " + "Chrome/35.0.1916.47" + " " + "Safari/537.36" ] url = 'https://www.stockmonitor.com/sector/healthcare/' headers_dict = {'User-Agent': headers[0]} req = Request(url, headers=headers_dict) webpage = urlopen(req) tree = parse(webpage)
Ainsi, healthcare_tickers
possède les sociétés par actions du secteur de la santé .
Vous pouvez facilement obtenir le secteur pour une entreprise / un ticker donné avec Yahoo Finance:
import yfinance as yf tickerdata = yf.Ticker('TSLA') #the tickersymbol for Tesla print (tickerdata.info['sector'])
Code renvoie: 'Consumer Cyclical'
Si vous voulez d'autres informations sur la société / ticker, il suffit d'imprimer (tickerdata.info) pour voir toutes les autres clés de dictionnaire possibles et les valeurs correspondantes, comme ['sector'] utilisé dans le code ci-dessus.
Il n'y a pas de balise
a
dontid
est secteur sur, par exemple, www.google.com/search?q=MSFT . Avez-vous un exemple concret de ce que vous voulez vraiment obtenir? Si c'est le cas, enrichissez votre question avec une telle précision.@keepAlive, par exemple d'ici: marketwatch.com/investing/stock/ibm I veulent obtenir le secteur , qui est: Business / Consumer Services . Ceci est indiqué sur la gauche du graphique, sous le prix de l'action.