Pythonで最新のニュースヘッドラインを取得する方法(feedparser)

使っている取引会社はどこ?
仮想通貨用(2019年5月からAPI取引対応) → GMOコイン
Python API用(FX APIはここしかない) → OANDA ジャパン

Pythonを使って最新のFXニュース(ロイターやマーケットウォッチ)のヘッドラインを取得する方法まとめ。PythonのRSSパーサーのライブラリ「feedparser」の基本的な使い方・インストール方法など。

こんばんは、新米データサイエンティスト(@algon_fx)です。食欲の秋を堪能した結果、体重が増えてしまいました。今週からジムを再開してしっかり絞っていきます。

さて、前回は「トランプ大統領のツイートからFXの為替相場を予想する方法」をまとめました。私は原則としてテクニカル分析 + 機械学習が主体ですが、ファンダメンタルズ分析も最近は取り入れています。

当選前から過激なツイートで有名だったトランプ氏ですが、今となればアメリカ大統領です。その発言(ツイート)が及ぼす影響は多大であり、「トランプ砲」と揶揄されたりします。

しかしながら、トランプ大統領のツイートだけでは正しいファンダメンタルズ分析は行えません。世の中には様々なニュースが出回っており、それらのニュースも多少ながら為替市場に影響を及ぼします。

そこで・・今日はPythonを使って最新のニュースデータを取得する方法をまとめます。ファンダメンタル分析をFX機械学習トレードに取り入れたい方、リアルタイムのニュースデータを取得した方は是非活用してみてください。

役に立つニュースデータとは?

機械学習でFX予想を行うためにニュースデータを使いたいと考えると、幾つか考えるべき条件があります。ニュースデータの鮮度はその一つです。

トレードのスタイルに応じて必要なデータの鮮度は異なります。例えば、比較的期間の長いスイングトレードや長期トレードのスタイルでは「日毎」のニュース鮮度で問題ないと思われます。

しかし、私の主体はデイトレードです。状況に応じてはスキャルピングに近いトレードも多々行います。つまり、ニュースが掲載された直後の為替レートの動きが重要なのです。

ニュースが各メディアで掲載された時点でデータの取得が望ましく、データ取得までのギャップがあるものは私的にはあまり役に立ちません

新鮮なニュースデータを取得する手段

新鮮なニュースデータを取得する方法ですが主に3パターンあります。「スクレイピング」「API」そして「RSS」です。それぞれメリット・デメリットがあります。

まずは「スクレイピング」をやってみました。Pythonでスクレピングをするのであれば「BeautifulSoup」や「Scrapy」が主要なライブラリーです。

両方とも使いやすく、少し操作方法を覚えれば簡単にスクレイピングを行うことが可能です。ただし、スクレイピングには2つデメリットもあります。

まずは「データ取得先の変更リスク」です。スクレイピングはデータを取得する先のフォーマットに適合させて、データをHTML(またはそれに準ずる)形式から取得します。つまり、データ取得先がフォーマットを変更する度にスクレイピングのコードも変更しなくてはいけません。データ取得先が1つならまだしも、複数あるとこの作業が大変です。

2つ目のデメリットが「相手に負担をかけてしまう」ことです。スクレイピングはプログラムで自動的にデータを取得できる反面、スクレイピングされる側は無駄なサーバー負荷がかかってしまうため、目立ったスクレイピングを行うと拒絶されることがあります。そもそも、スクレイピングを行う場合は相手が明確に許可している、または個別に許可を得ることが必要です。

単発的なデータ取得であればスクレイピングで問題ありませんが、新鮮かつ定期的なデータ取得には不向きです。

そこで2つ目は「API」を検討しました。日本語のニュースデータのAPIは恐らく限定的だろうが、海外ニュースであればAPIくらいありそうだと考えました。探したら便利なのが見つかりました。それが「NewsAPI」です。

newsapi.org

NewsAPIは世界中のニュースを取得してAPIからヘッドラインを取得可能なPythonのライブラリです。まさにこれ!これは便利そうだと思いました!

しかしながら・・詳細を確認してみると残念な点が一つ。非商用であれば無料で利用が可能なんですが、無料版ではニュースが掲載されてから15分間の遅延が生じます。有料版ではリアルタイムで取得が可能ですが、月額で449ドルかかります。う〜ん、、使いたいけどそこまでガチデータは必要ないなぁってことで却下になりました。

消去法で行き着いたのが3つ目の方法「RSS」です。もはや平成も終わりかけのこの時代、RSSなんて死語に近しい存在ですが・・でもやはりRSSは役に立つのです!RSSとはニュースやブログなどで、ウェブサイトの更新情報を配信するためのフォーマットです。

自分でコード書いてRSSをパース(構文解析)してみようかと思ったのですが、便利なライブラリを発見しました。それが「feedparser」です。

こいつが超手軽+便利でした!RSSであればデータの鮮度も多くのサイトで問題ないと思われます。では、feedparserを使ってニュースヘッドラインデータを取得してみましょう。

STEP1 feedparserのインストール

ではJupyter Notebookを立ち上げて実際にニュースデータを取得してみましょう。まずはfeedparserのインストールから。これは簡単にpipで行えます。

feedparserですがPython2系しか対応していませんが、インストール時に2to3で自動更新してくれるためPython3系でも問題なく使えます

RSSはサイトの更新情報をまとめたフォーマットですが複数種類あります。feedparserですが、主要なRSSフォーマット(RSS0.9、RSS1.0、RSS2.0、Atom)に対応しています。便利です。

STEP2 ロイタービジネス面を取得してみる

では、早速feedparserをインポートしてニュースのヘッドラインを取得してみましょう。金融に強いメディアは多数ありますが、まずは大御所であるロイターのビジネスカテゴリのヘッドラインを取得してみましょう。

ロイタービジネス(英語)のRSSフィードは下記のURLです。ブラウザでアクセスるとフィードの内容が確認できます。

http://feeds.reuters.com/reuters/businessNews

では、Pythonを使ってこのRSSフィードの内容を取得しましょう。

FeedParserDictという型のようです。確認してみましょう。

どうやらdict型のようなオブジェクトのようです。データを確認して欲しいデータを3つに絞ります。ニュースのヘッドライン(title)、ニュースの公開日時(published)、ニュースのURL(link)を表示させて見ましょう。

今話題の日産のゴーン氏のニュースのようですね。最後にニュースが何件取得できるのか確認して見ましょう。

どうやらRSSで取得できたのは最新の20件のようです。こんな簡単にRSSを取得できるなんて、本当に便利なライブラリです。

STEP3 マーケットウォッチの最新ニュースを取得

ロイターに続いて世界中の投資家が利用しているマーケットウォッチのヘッドラインも取得してみましょう。マーケットウォッチですがリアルタイムヘッドラインのRSSフィードは下記で配信しています。

http://feeds.marketwatch.com/marketwatch/realtimeheadlines/

では、Pythonでデータを取得してみましょう。

先ほどはデータをそのまま確認しました。今回はより視認性を高めるためPandasのデータフレーム形式に変換してあげましょう。

不要なデータが多いので少し綺麗にしてあげます。

綺麗になりました。マーケットウォッチの最新のニュースヘッドラインが取得されました。

STEP4 Zai FXさんの為替ニュースを取得

RSSがあればデータの取得は可能です。上の事例は英語のニュース大手のデータを取得してみましたが、次は日本語のニュースサイトからもデータを取得してみましょう。

日本でも多くのニュースサイトがありますが、今回はZai FXさんの「ザイFX!為替のとれたてニュース」のデータを取得してみます。

日本語でもしっかり取得されています。SummaryだとHTMLが少し混じっているようなので機械学習の訓練前にクレンジングする必要はありそうですが。

まとめと次の課題

如何でしたでしょうか?今回はニュースサイトのRSSフィードを利用してPythonで最新ニュースヘッドラインのデータを取得する方法をまとめました。

RSSですがニュースサイトの多くが配信しています。英語、日本語含めて訓練データとして使いたいと思うニュースサイトをチェックして、RSSが配信されていればデータの取得が可能ですね。

ただし、それぞれのサイトでニュースの鮮度は異なります。また実際のトレードで役に立つようなデータにするにはニュースタイトルだけでなく、詳細ページの本文などのデータも必要です。(結局スクレイピングかw)

FXで機械学習を使うための初心者向けチュートリアルもまとめています!Pythonの初歩的な知識があれば実装が可能ですので、興味がある方は是非ご覧ください!

決定木を使ってFX予想をやってみる
FXトレードでロジスティック回帰を独自テクニカル指標として活用する方法

ブログ読んでいただきありがとうございます!Twitterでも色々と発信しているので、是非フォローお願いします!

 

使っているFX会社はどこ?
仮想通貨用(2019年5月からAPI取引対応) → GMOコイン
Python API用(FX APIはここしかない) → OANDA ジャパン

機械学習チュートリアル

Posted by algon