4

Google の金融ページをスクレイピングして株価を取得しようとしています。Python でこれを行っており、urllib パッケージを使用してから正規表現を使用して価格データを取得しています。

Python スクリプトを実行したままにしておくと、最初はしばらく (数分) 動作し、その後例外 [HTTP エラー 503: サービスを利用できません] がスローされ始めます。

これは、Web サーバー側で頻繁なページ更新をロボットとして検出し、しばらくしてからこの例外をスローするために発生していると思います..

これを回避する方法はありますか。つまり、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

4 に答える 4

5

質問はかなり古いですが、選択された回答は無効になっています。
API は廃止されました。

Google ファイナンスからすべての企業をスクレイピングし、 http://scrape-google-finance.compunect.com/
で現在の価格と一致させるオープン ソース プロジェクトがあります。ブロックされます。
内部金融会社のマッチング API を使用して企業をスクレイピングし、チャート API を使用して価格を取得します。ただし、これは python ではなく php コードです。それがどのようにタスクを解決し、それを適応させるかを学ぶことができます。

于 2014-04-02T10:48:45.050 に答える
3

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()
于 2011-04-12T21:11:17.450 に答える
3

Yahoo Finance は、より多くの国と株式をカバーする金融情報を入手するのにも適した場所です。

Python 2 の場合、ystockquoteを使用できます。Python 3 では、以前のものから書き直したyfqを使用できます。

Google と Intel の現在の見積もりを入手するには。

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

2012 年 3 月 3 日から 2012 年 3 月 5 日までの Yahoo の過去の引用を取得します。

>>> 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']]
于 2012-03-12T00:53:28.030 に答える
2

Google Finance API があります。

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

また、そのための Python クライアント ライブラリがあります。

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

于 2011-04-12T14:37:46.720 に答える