我试图从雅虎获得数据,主要是股票的EV/EBITDA。
我尝试使用chrome中的xpath获取文本,结果返回[];即使在删除"tbody“之后也是如此。
from lxml import html
import requests
page = requests.get('https://finance.yahoo.com/quote/AAPL/key-statistics?
p=')
tree = html.fromstring(page.content)
data = tree.xpath('//*[@id="Col1-0-KeyStatistics-
Proxy"]/section/div[2]/div[1]/div[1]/div/table/tbody/tr[9]/td[2]/text()')
print(data)我再一次删除了tbody,结果仍然是get []。
我已经能够使用下面的代码获取一些文本。
from lxml import html
import requests而1:
tick = input('Type in stock ticker: ')
page = requests.get('https://finance.yahoo.com/quote/' + tick + '/key-statistics?p=')
tree = html.fromstring(page.content)
data = tree.xpath('//*[@class="Fz(s) Fw(500) Ta(end)"]/text()')
print('\n')
print( tick + '-EV/EBITDA' + ':' +data[8])
print('\n')
pass这适用于大多数股票,但是由于一些股票缺少数据,因此返回的第9个值并不总是EV/EBITDA。web具有文本"N/A“,但脚本没有占位符,因此空字段会导致数据移动。
结果:
Type in stock ticker: AAPL
AAPL-EV/EBITDA:13.81
Type in stock ticker: DRIO
DRIO-EV/EBITDA:-221.56%
Type in stock ticker: 在EV/EBITDA之前,DRIO缺少一些数据,因此返回了错误的值。
我需要让上面的代码有N/A值的占位符。或者更好地通过xpath获得EV/EBITDA。
我是新手编码<1个月的经验,自学,很容易。
发布于 2018-08-28 15:18:23
我想通了。添加了//而不是/之前的text()此返回N/A,其中有N/A值而不是零,因此返回的列表中的第8项始终是EV/EBITDA,这也允许我轻松地提取股票的其他数据。
from lxml import html
import requests
while 1:
tick = input('Type in stock ticker: ')
page = requests.get('https://finance.yahoo.com/quote/' + tick + '/key-statistics?p=')
tree = html.fromstring(page.content)
data = tree.xpath('//*[@class="Fz(s) Fw(500) Ta(end)"]//text()')
print('\n')
print( tick)
print('Market Cap' + ': ' + data[0])
print('Enterprise Value' + ': ' + data[1])
print('P/E' + ': ' + data[2])
print('PEG' + ': ' + data[4])
print('P/S' + ': ' + data[5])
print('P/B' + ': ' + data[6])
print('EV/EBITDA' + ': ' + data[8])
print('\n')
pass将为自动收报机‘AAPL’返回以下内容
Type in stock ticker: AAPl
AAPl
Market Cap: 1.05T
Enterprise Value: 1.09T
P/E: 19.74
PEG: 1.42
P/S: 4.12
P/B: 9.18
EV/EBITDA: 13.85
Type in stock ticker: https://stackoverflow.com/questions/52034029
复制相似问题