очистка страницы, чтобы получить цены от финансов Google - PullRequest
4 голосов
/ 12 апреля 2011

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

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

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

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

или даже лучше, если Google дает API, я хочу сделать это на python, потому что готовое приложение на python, но если в python нет ничего доступного для этого, я могу рассмотреть альтернативы. Это мой метод 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

Ответы [ 4 ]

5 голосов
/ 02 апреля 2014

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

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

3 голосов
/ 13 апреля 2011

Чтобы обойти большинство ограничений скорости или обнаружения ботов из таких, как Google, Википедия или 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()
3 голосов
/ 12 марта 2012

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']]
2 голосов
/ 12 апреля 2011

Существует API Google Finance:

http://code.google.com/apis/finance/docs/2.0/developers_guide_protocol.html

И для него есть клиентская библиотека Python:

http://code.google.com/p/gdata-python-client/

...