1
votes

Comment obtenir le secteur des sociétés boursières à partir du symbole ou du nom de la société en python

É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


2 commentaires

Il n'y a pas de balise a dont id 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.


3 Réponses :


1
votes

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:

  1. Cet xpath dépend totalement du site Web que vous regardez, expliquant pourquoi il n'y avait aucun espoir de rechercher "// 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.
  2. Pour mener une telle "étude", j'utilise Chrome DevTools et vérifie tout xpath dans la console, en faisant $ x () où la fonction $ x est documentée ici (avec des exemples!).
  3. Heureusement pour vous, les informations que vous souhaitez obtenir de marketwatch.com/investing/stock - le nom du secteur - est généré statiquement (c'est-à-dire pas généré dynamiquement au chargement de la page, auquel cas d'autres techniques de scraping auraient été nécessaires, en recourant à d'autres bibliothèques python telles que Selenium .. mais c'est une autre question).


5 commentaires

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.



0
votes

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é .


0 commentaires

0
votes

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.


0 commentaires