Xpath Yahoo Finance - PullRequest
       50

Xpath Yahoo Finance

0 голосов
/ 27 августа 2018

Я пытаюсь получить данные от Yahoo, в первую очередь EV / EBITDA для акций.

Я пытался использовать xpath из chrome для получения текста, который возвратил [];даже после удаления "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.ИЛИ Правильно получить EV / EBITDA через предпочтительно xpath.

Я новичок в программировании <1 месяц, самоучка, будь проще.</p>

1 Ответ

0 голосов
/ 28 августа 2018

Разобрался.Добавил // вместо / перед text () это возвращение N / A, где там, где значения N / A вместо ничего, поэтому восьмой элемент в списке был ВСЕГДА 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:  
...