我正试图从Yahoo获取数据,主要是股票的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,仍然得到[]。
我已经可以使用以下内容找回一些文字。
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。网络上有文本“ 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:
DRIO在EV / EBITDA之前缺少一些数据,因此返回了错误的值。
我需要使以上代码具有N / A值的占位符。 要么 通过preferebly xpath正确获得EV / EBITDA。
我刚开始编写<1个月的经验,自学成才,很容易。
答案 0 :(得分:0)
弄清楚了。在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: