очистка страницы, чтобы получить цены от Google Finance

Я пытаюсь получить цены на акции, очищая страницы финансов Google, я делаю это на питоне, используя пакет urllib, а затем использую регулярное выражение для получения данных о ценах.

Когда я оставляю свой скрипт Python запущенным, он сначала работает некоторое время (несколько минут), а затем начинает выдавать исключение [Ошибка HTTP 503: Служба недоступна]

Я предполагаю, что это происходит потому, что на стороне веб-сервера он обнаруживает частые обновления страниц как робот и через некоторое время выдает это исключение.

есть ли способ обойти это, т.е. удалить какой-либо файл cookie или создать какой-либо файл cookie и т. д..

или даже лучше, если Google дает какой-то API, я хочу сделать это на питоне, потому что полное приложение на питоне, но если в питоне нет ничего для этого, я могу рассмотреть альтернативы. Это мой метод Python, который я использую в цикле для получения данных (с несколькими секундами сна я вызываю этот метод в цикле)

 def getPriceFromGOOGLE(self, symbol):
    """ 
    gets last traded price from google for given security
    """         
    toReturn = 0.0
    try:
        base_url = 'http://google.com/finance?q='
        req = urllib2.Request(base_url + symbol)
        content = urllib2.urlopen(req).read()
        namestr = 'name:\"' + symbol + '\",cp:(.*),p:(.*),cid(.*)}'
        m = re.search(namestr, content)
        if m:
            data = str(m.group(2).strip().strip('"'))
            price = data.replace(',','')
            toReturn = float(price)
        else:
            print 'ERROR ' + str(symbol) + ' --- ' + str(content)      
    except Exception, exc:
        print 'Exc: ' + str(exc)       
    finally: 
        return toReturn

person user424060    schedule 12.04.2011    source источник
comment
Прочтите 5.3 из TOS.   -  person jfs    schedule 12.04.2011
comment
Согласен... и API - это интерфейс, предоставляемый Google.   -  person AJ.    schedule 12.04.2011
comment
Это законно? Я имею в виду делать веб-скрейпинг в Google и Yahoo?   -  person JohnPristine    schedule 17.12.2013
comment
Я бы предпочел использовать это: fixer.io   -  person coderama    schedule 08.09.2017


Ответы (4)



Вопрос довольно старый, но выбранный ответ больше недействителен.
API устарел.

Существует проект с открытым исходным кодом для извлечения всех компаний из Google Finance и сопоставления их с их текущей ценой на http://scrape-google-finance.compunect.com/
Проект решил большинство проблем, включает кеширование, управление IP-адресами и стабильно работает без блокировок.
Он использует API-интерфейс внутренней финансовой компании для парсинга компаний. и график API, чтобы получить цены. Однако это php-код, а не python. Можно еще узнать, как он решал поставленные задачи и адаптировать его.

person John    schedule 02.04.2014
comment
Хороший ответ, но код написан для использования с us-proxies.com, профессиональным поставщиком IP-адресов. По-видимому, скребки используют разные IP-адреса, чтобы их не закрыли. И этот сайт взимает около 30 долларов в месяц за пять IP-адресов, 145 долларов в месяц за 30 IP-адресов. - person zipzit; 22.06.2014
comment
Вы правы, код с открытым исходным кодом, если у вас есть более дешевое / собственное IP-решение, которое вы хотите попробовать, просто возьмите нужные вам детали. Для Google Finance вам не понадобится много IP-адресов, в зависимости от того, что вы именно хотите делать. - person John; 22.06.2014

Чтобы обойти большинство ограничений скорости или обнаружения ботов от Google, Wikipedia или Yahoo, подделайте свой пользовательский агент.

В этом случае запросы вашего скрипта будут выглядеть так, как если бы они были из последней версии Google Chrome.

headers = {'User-Agent' : "Mozilla/5.0 (Windows NT 6.0; WOW64) AppleWebKit/534.24 (KHTML, like Gecko) Chrome/11.0.696.16 Safari/534.24"}
req = urllib2.Request(url,None,headers)
content = urllib2.urlopen(req).read()
person Aphex    schedule 12.04.2011
comment
можете ли вы использовать этот трюк с urfetch, а также с urllib2? - person memius; 08.08.2013

Yahoo Finance также является хорошим местом для получения финансовой информации, которая охватывает больше стран и акций.

Для Python 2 вы можете использовать ystockquote. Для Python 3 вы можете использовать yfq, который я переписал из предыдущего.

Чтобы получить текущие котировки Google и Intel.

>>> import yfq
>>> yfq.get_price('GOOG+INTL')
{'GOOG': '600.25', 'INTL': '22.25'}

Чтобы получить исторические котировки Yahoo с 3 марта 2012 г. по 5 марта 2012 г.

>>> yfq.get_historical_prices('YHOO','20120301','20120303')
[['Date', 'Open', 'High', 'Low', 'Close', 'Volume', 'Adj Close'], ['2012-03-02', '14.89', '14.92', '14.66', '14.72', '9164900', '14.72'], ['2012-03-01', '14.89', '14.96', '14.79', '14.93', '12283300', '14.93']]
person angelo    schedule 12.03.2012