Информация веб-скрапинга, кроме цены, от Yahoo Finance в Python 3

Я новичок в python, поэтому прошу прощения за любые ошибки новичка. Я следовал руководству по извлечению цен на акции из Python, но после исправления его для работы в Python 3, когда я пытался адаптировать его к другим элементам страницы Yahoo Finance, таким как коэффициенты P / E и бета-версия, на выходе были просто пустые квадратные скобки.

import urllib.request
import re

symbolslist = ["aapl","spy","goog","nflx"]

i=0
while i<len(symbolslist):
    url = "http://finance.yahoo.com/q?s=" +symbolslist[i] +"&q1=1"
    htmlfile = urllib.request.urlopen(url)
    htmltext = htmlfile.read()
    regex = b'<th scope="row" width="48%">"P/E "<span class="small">(ttm)</span>:    </th><td class="yfnc_tabledata1">(.+?)</td>'
    pattern = re.compile(regex)
    price_to_earnings = str(re.findall(pattern,htmltext))
    print ("The price to earnings of " + symbolslist[i]+ " is " + price_to_earnings)
    i+=1

это был выход

    The price to earnings of aapl is []
    The price to earnings of spy is []
    The price to earnings of goog is []
    The price to earnings of nflx is []
    >>> 

person user2741092    schedule 02.09.2013    source источник
comment
Опубликуйте свой текущий код.   -  person Blender    schedule 03.09.2013
comment
Когда я был новичком в программировании, я использовал регулярное выражение для очистки. Это сработало. Через пол года обучения я освоился и смог перейти на BeautifulSoup; BeautifulSoup значительно лучше подходит для соскабливания.   -  person appleLover    schedule 03.09.2013


Ответы (3)


Сначала я бы предложил вам использовать BeautifulSoup вместо regex. И надеюсь, что этот пример поможет вам решить вашу проблему, даже если это python2.7:

>>> import urllib2
>>> from bs4 import BeautifulSoup as bs4
>>> html_file = urllib2.urlopen("http://finance.yahoo.com/q?s=goog&q1=1")
>>> soup = bs4(html_file)
>>> for price in soup.find(attrs={'id':"yfs_l84_goog"}):
...     print price
... 
846.90
>>> 
person Vor    schedule 02.09.2013
comment
Спасибо. Заглянем в красивый суп. Однако с регулярным выражением, я думаю, одной из проблем может быть код, который я получаю от Yahoo (проверить элемент), в первую очередь, код для цены работает, но для P/E или бета код имеет совершенно другой формат с неопределенными классами. - person user2741092; 03.09.2013

Используйте формат CSV Yahoo Finance, а не HTML, затем используйте CsvReader для анализа результатов.

Подробнее о формате CSV см. здесь. Однако URL-адрес Yahoo Finance изменился с момента написания этого документа. Используйте http://download.finance.yahoo.com вместо http://Finance.yahoo.com.

person Jimothy    schedule 02.01.2014

У меня та же проблема, и когда я перехожу на http://download.finance.yahoo.com, Меня перенаправляют на http://finance.yahoo.com, и мне кажется, что ссылка в формате CSV закрыта Yahoo.

Проблемы, кажется, в том, что URL-адрес слишком длинный и запутанный. Что, возможно, они и сделали, чтобы мы не могли продолжать удалять их данные таким образом. Есть ли другой способ сделать это? Я также пытаюсь отказаться от Finance.msn.com, но столкнулся с той же проблемой, когда URL-адрес слишком запутанный и длинный.

Возможно, мне просто нужно поискать другой финансовый сайт, менее известный. Я посмотрю, что я могу найти.

person byoungdale    schedule 11.09.2014