PHP言語とスクレイピング用ライブラリを頑張って学ぶべし
Webサイトの情報をスクレイピングで取得する(前編)では、スクレイピング技術を使ってWebサイトの情報を取得するための全体の流れとMQL4側のソースコードをお伝えしました。
今回は前編では触れていなかった、HTML解析プログラム「GetYahooFinanceFX.php」の中身について説明します。
.phpという拡張子はPHP言語を意味します。MQL4の世界から飛び出しますので、気合いを入れてお読みください!
と言っても実用的なサンプルを紹介いたしますので、それをベースに自分の取得したいサイトにアレンジしてもらえれば良いかと思います。
では早速、YahooファイナンスのFX情報サイトのHTML解析を行うプログラムのサンプル「GetYahooFinanceFX.php」の中身をお見せします。
<?php header('Content-Type: text/html; charset=Shift_JIS'); // スクレイピング用ライブラリの読み込み require_once("./phpQuery-onefile.php"); // スクレイピング対象URL(お好きなニュースサイトのURLに変更してください) $url = "https://finance.yahoo.co.jp/news/fx/"; $html = file_get_contents($url); // 上記のスクレイピング用ライブラリはHTML-ENTITIESでないと文字化けするので、UTF-8からHTML-ENTITIESに変換 $html = mb_convert_encoding($html, "HTML-ENTITIES", "UTF-8"); // HTML解析 // Aタグの中のclass="_36K6k1hY"を持つタグの中のテキストのうち、最新(0番目)のものを取得 // ※HTML構造はWebサイトごとに異なるので、適宜変更頂く必要があります // 戻ってくる文字列はUTF-8 $newsTitle = phpQuery::newDocument($html)->find("a")->find("._36K6k1hY:eq(0)")->text(); // MT4はShift-JISでないと文字化けするので、UTF-8からSJISに変換 $newsTitle = mb_convert_encoding($newsTitle, "SJIS", "UTF-8"); // 整形したニュースタイトル情報を出力 → MQL4側で受け取る文字列 echo($newsTitle); ?>
まず、上記コードを記載したファイル「GetYahooFinanceFX.php」をご自身のWebサーバーに設置します。別のWebサイトの情報を取得したい場合はソースコードを変更します。
次に、ここをクリックしてphpQueryのzipファイルをダウンロードし、zipの中にあるphpQuery-onefile.phpを上記ファイルと同じ場所に設置します。
そして、PHPサーバーをWebサーバーに構築します。ワードプレスはPHP言語でできていますので、ワードプレスが動くWebサーバーであれば、PHPサーバーは自動的に構築済みとなります。
これで準備完了です。
試しにここにアクセスしてみてください。
まっさらな画面に最新のニュースタイトルだけが表示されているはずです。
これはYahooファイナンスのFX情報サイトの一番上のニュースのタイトルを取得し、表示したものです。
Webサイトの情報をスクレイピングで取得する(前編)内のMQL4がGetYahooFinanceFX.phpを呼び出すと、上記のニュースタイトル(文字列)を取得することになります。
ポイントは「HTML解析」と「文字コード変換」の2点です。
$html変数にはHTMLの内容全部がまるっと格納されております。HTML解析とは、その$html変数から必要なタグを抜き出すことを指します。
上記コードの場合、HTMLの中にあるAタグ配下のclass=”_36K6k1hY”属性を持つ最初のタグの中に挟まれているテキストを取得せよ、となります。
->は「の中の」みたいに訳すと分かりやすいかと思います。._36K6k1hYのドットはHTMLのclass属性であることを表しています。
:eq(0)は0番目、つまり最初という意味です。プログラミングの世界では通常、0番目が最初の序数になります。
文字コード変換はとても大事なのですが、ひとまず上記のソースコードを使えば、MT4使いとしては気にしなくて大丈夫です。
これでWebサイトの情報を取得するための技術は全てお伝えしたことなります。
今回のスクレイピングの記事は難易度高めなので、プログラミング初心者には敷居が高いかもしれませんが、他言語との連携ができるようになると、やれることの幅が飛躍的に広がりますので、ぜひチャレンジしてみてください!