如何从python中的股票代码或公司名称获取股票市场公司部门

Posted

技术标签:

【中文标题】如何从python中的股票代码或公司名称获取股票市场公司部门【英文标题】:How to obtain stock market company sector from ticker or company name in python 【发布时间】:2020-10-06 15:42:37 【问题描述】:

给定一家公司 ticker 或名称,我想使用 python 获取它的 sector

我已经尝试了几种可能的解决方案,但都没有成功

最有前途的两个是:

1) 使用来自:https://gist.github.com/pratapvardhan/9b57634d57f21cf3874c的脚本

from urllib import urlopen
from lxml.html import parse

'''
Returns a tuple (Sector, Indistry)
Usage: GFinSectorIndustry('IBM')
'''
def GFinSectorIndustry(name):
  tree = parse(urlopen('http://www.google.com/finance?&q='+name))
  return tree.xpath("//a[@id='sector']")[0].text, tree.xpath("//a[@id='sector']")[0].getnext().text

但是我使用的是python --version 3.8

我已经能够调整这个解决方案,但最后一行不起作用,而且我对抓取网页完全陌生,所以如果有人有一些建议,我将不胜感激。

这是我当前的代码:

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)

但是最后一部分不起作用,我对这个 xpath 语法很陌生:

tree.xpath("//a[@id='sector']")[0].text, tree.xpath("//a[@id='sector']")[0].getnext().text

2) 另一个选项是嵌入RTTN 包,如下所示:Find which sector a stock belongs to

但是,我想在我的 Jupyter 笔记本中运行它,而运行 ss <- stockSymbols() 需要很长时间@

【问题讨论】:

没有a 标记,其id扇区,例如www.google.com/search?q=MSFT。你有一个你真正想要得到的具体例子吗?如果是这样,请以如此精确的方式丰富您的问题。 @keepAlive,例如从这里:marketwatch.com/investing/stock/ibm 我想获得 sector,即:Business/Consumer Services。这显示在图表左侧,股票奖励下方。 【参考方案1】:

根据您的评论,对于marketwatch.com/investing/stock 特别是,可能工作的 xpath 是 "//div[@class='intraday__sector']/span[@class='label']",意思是这样做 p>

tree.xpath("//div[@class='intraday__sector']/span[@class='label']")[0].text

应该返回所需的信息。

我对抓取网页完全陌生 [...]

一些精度:

    此 xpath 完全取决于您正在查看的网站,解释了为什么在您在 cmets 中提到的页面中搜索 "//a[@id='sector']" 没有希望,因为此 xpath(现已过时)是 google-finance 特定的。换句话说,您首先需要“研究”您感兴趣的页面,以了解您想要的信息位于何处。 为了进行这样的“研究”,我使用Chrome DevTools 并检查控制台中的任何xpath,执行$x(<your-xpath-of-interest>),其中记录了$x 函数here(带有示例!)。 幸运的是,您想从marketwatch.com/investing/stock 获取的信息——扇区名称——是静态生成的(即不是在页面加载时动态生成的,在这种情况下需要其他抓取技术,求助于其他 python 库,例如 Selenium.. 但这是另一个问题。

【讨论】:

这个tree.xpath("//div[@class='intraday__sector']/span[@class='label']") 给出了一个空的list。来自使用谷歌网站使用问题代码生成的tree 变量。 @alejandro 适用于给定网站的 xpath 不适用于其他网站。这个适用于marketwatch.com/investing/stock。查看更新。 是的,我想,但是当我尝试为该网站执行此操作时,我收到以下错误:HTTPError: HTTP Error 405: Method Not Allowed。这似乎与代码的urlopen 部分有关。 @al 请注意,405 错误与您帖子的核心主题无关。话虽如此,你见过that 吗? 我确实在看它;)好的,那我会继续排除故障!谢谢,到目前为止,您的回复很好,一旦完成,如果一切正常,我将接受。【参考方案2】:

回答问题:

如何在python中从股票代码或公司名称中获取股票市场公司部门?

在阅读了来自@keepAlive 的一些材料和一些不错的建议后,我不得不找到解决办法。

以下以相反的方式完成工作,即获取给定行业的公司。有 10 个部门,所以如果想要所有部门的信息也不会太多工作:https://www.stockmonitor.com/sectors/

鉴于 marketwatch.com/investing/stock 抛出 405 错误,我决定使用 https://www.stockmonitor.com/sectors/,例如:

https://www.stockmonitor.com/sector/healthcare/

代码如下:

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)
healthcare_tickers = []
for element in tree.xpath("//tbody/tr/td[@class='text-left']/a"):

    healthcare_tickers.append(element.text)

pd.Series(healthcare_tickers)

因此,healthcare_tickers 拥有医疗保健领域的股票公司。

【讨论】:

【参考方案3】:

您可以通过 yahoo Finance 轻松获取任何给定公司/股票代码的部门:

import yfinance as yf

tickerdata = yf.Ticker('TSLA') #the tickersymbol for Tesla
print (tickerdata.info['sector'])

代码返回:'Consumer Cyclical'

如果您想了解有关公司/股票代码的其他信息,只需 print(tickerdata.info) 即可查看所有其他可能的字典键和对应值,例如上面代码中使用的 ['sector']。

【讨论】:

以上是关于如何从python中的股票代码或公司名称获取股票市场公司部门的主要内容,如果未能解决你的问题,请参考以下文章

如何通过输入行业名称来获取股票代码列表

如何找到A股的所有股票的代码?比如网址或URL等

使用股票代码输入、雅虎或谷歌 API 检索公司名称

如何查找股票的上市时间?

利用python获取股票数据

python 从YAHOO Finance获取股票公司摘要