2017-02-14 2 views
-2

Я ищу, чтобы разобрать конкретную страницу Yahoo с использованием скрипта Python (например, взять https://finance.yahoo.com/quote/NOA?ltr=1) и напечатать «Рекомендуемый рейтинг» для файла. Рекомендуемый рейтинг можно найти в правой части страницы примерно на полпути вниз.Учетная запись рекомендуемый рейтинг от Yahoo Stock site

Это то, что я до сих пор

try: 
    import urllib.request as urllib2 
except ImportError: 
    import urllib2 
from bs4 import BeautifulSoup 
quote_page = 'https://finance.yahoo.com/quote/NOA?ltr=1' 
page = urllib2.urlopen(quote_page) 
soup = BeautifulSoup(page, "html.parser") 
name_box = soup.find(attrs={'div': 'rating-text Arrow South Fw(b) Bgc($strongBuy) Bdtc($strongBuy)'}) 
name = name_box.text.strip() 
print(name) 

Хитрость в том, что я считаю, что рекомендуемый рейтинг только перечислены на странице, как InnerHTML. Я не уверен, как бы я хотел получить данные, толчок в правильном направлении был бы очень признателен!

+2

Что вы пробовали? Вы попробовали [BeautifulSoup] (https://www.crummy.com/software/BeautifulSoup/) в частности? – 9000

+0

Я использовал lxml, вы бы рекомендовали BeautifulSoup? –

+0

У Yahoo нет API? Гораздо надежнее использовать API, чем очищать, поскольку API-интерфейсы предназначены для использования автоматизированными системами, а веб-сайты вообще не являются. Вы могли бы построить отличный скребок и обнаружить, что вы заблокированы Yahoo. – halfer

ответ

2

Yahoo делает запрос на получение URL-адреса в сценарии ниже для некоторых своих данных. Если вы посмотрите на вкладке сети инструментов разработчика и обновите страницу для акций NOA, вы увидите «NOA? Formatt ...». Щелкните это, а затем просмотрите объект ответа, чтобы просмотреть некоторые данные. Вам понадобится модуль запросов для скрипта ниже: pip install requests.

# get_mean_recs.py 
import csv 
from datetime import datetime 
import requests 
import sys 

get_date = lambda : datetime.utcnow().strftime('%d-%m-%Y') 

lhs_url = 'https://query2.finance.yahoo.com/v10/finance/quoteSummary/' 
rhs_url = '?formatted=true&crumb=swg7qs5y9UP&lang=en-US&region=US&' \ 
      'modules=upgradeDowngradeHistory,recommendationTrend,' \ 
      'financialData,earningsHistory,earningsTrend,industryTrend&' \ 
      'corsDomain=finance.yahoo.com' 

def get_mean_rec(ticker): 
    url = lhs_url + ticker + rhs_url 
    r = requests.get(url) 
    if not r.ok: 
     return -1 
    result = r.json()['quoteSummary']['result'][0] 
    return result['financialData']['recommendationMean']['fmt'] 

def read_from_csv(fn): 
    with open(fn, 'r') as f: 
     reader = csv.reader(f) 
     for line in reader: 
      for ticker in line: 
       yield ticker 

def write_to_csv(fn, data): 
    with open(fn, 'a') as f: 
     fieldnames = data[0].keys() 
     writer = csv.DictWriter(f, fieldnames=fieldnames) 
     for item in data: 
      writer.writerow(item) 

def assemble_dict(ticker): 
    return { 
     'ticker': ticker, 
     'mean_rec': get_mean_rec(ticker), 
     'utc_date': get_date() 
    } 

def main(): 
    in_fn = sys.argv[1] 
    out_fn = sys.argv[2] 
    data = [assemble_dict(ticker) for ticker in read_from_csv(in_fn)] 
    write_to_csv(out_fn, data) 

if __name__ == '__main__': 
    main() 

Использование:

python get_mean_recs.py input.csv output.csv 
+0

Спасибо! Это именно то, что я искал! –

+0

Мне удалось выяснить CSV, но мне любопытно, как вы знаете, как отформатировать ссылку, которая получает рекомендуемые рейтинги. Я хочу добавить больше информации в список, и я пытаюсь выяснить, как изменить эти URL-адреса, чтобы получить правильную информацию. Спасибо! –

+0

Вам не нужно изменять URL-адрес. Просто отпечатайте объект, который возвращается из r.json(), чтобы узнать, что еще доступно. Затем следуйте за клавишами/индексами до требуемого значения. – Jay

0

Существует API для доступа к финансовой информации yahoo, например.

http://finance.yahoo.com/d/quotes.csv?s=NOA&f=snd1l1yr

Я думаю, вы можете быть лучше использовать, что для извлечения необходимой информации. Более подробную информацию о параметрах можно найти здесь: http://wern-ancheta.com/blog/2015/04/05/getting-started-with-the-yahoo-finance-api/

+0

Я не могу найти список доступной информации, которую можно вытащить с помощью этого API, есть ли у вас ссылка? Благодаря! –

Смежные вопросы