如何从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) 另一个选项是嵌入R
的TTN
包,如下所示: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中的股票代码或公司名称获取股票市场公司部门的主要内容,如果未能解决你的问题,请参考以下文章