Search

検索したいワードを入力してください

2019年01月22日

PHPでもスクレイピングできる?サイトからタイトルを取得する

PHPでスクレイピングを行うのに便利なphpQueryの解説です。phpQueryをダウンロードして、PHPを数行書くだけでスクレイピングを行うことができます。サイトを訪問し情報を取得する業務などはスクレイピングを活用すれば、自動化できます。

株式会社BrandingEngineerのPR記事からタイトルと更新日を抽出する

PHPでのスクレイピング手順

スクレイピングといえばPythonが有名ですが、PHPでもphpQueryを使えば簡単にスクレイピングができます。phpQueryのダウンロードからスクレイピングしてきた要素をファイルに書き込むまでの手順を解説していきます。

Branding Engineerのサイトの「【業界初】プログラミング学習サービスのカオスマップ2018年版を”tech boost”が公開!」という記事からタイトルと更新日を取得して、テキストファイルに書き込みます。

index.phpファイルを作成し、その中でphpQueryのファイルを読み込んで、スクレイピングを行います。プログラム全体は次のようになります。1行ずつみていきましょう。

index.php
<?php
require_once("phpQuery-onefile.php");

$doc = phpQuery::newDocumentFile("https://magazine.tech-boost.jp/Programming-languages/php/1073154");

$title = $doc[".topic-title:first"]->text();

file_put_contents("test.txt", $title . "\n");

$updatedAt = $doc[".last-updated-at:first"]->text();

$file = fopen("test.txt", "a");
fwrite($file, $updatedAt);
fclose($file);

phpQueryをダウンロード

下記のリンクより、phpQuery-X.X.X.XXX-onefile.zip をダウンロードし、解凍します。次にindex.phpを新規作成し、解凍されたファイルphpQuery-onefile.phpと同じディレクトリに保存します。

phpQuery-onefile.phpを編集することはなく、index.phpにPHPを書いていきます。

phpQueryを読み込む

require_once関数を使って、ダウンロードしてきたphpQueryのファイルを読み込みます。require_onceは1度だけ外部のPHPファイルを読み込むPHPがあらかじめ用意している関数です。

require_once("phpQuery-onefile.php");

スクレイピングしたいサイトを読み込む

URLを指定して、サイトのHTMLのDOMを取得します。

$doc = phpQuery::newDocumentFile("https://b-engineer.co.jp/benews/4811");

セレクタの使い方

基本的なセレクタの指定方法の例を紹介します。($docにはphpQueryで作成されたDOMが入っているものとします。)HTMLのタグ、CSSのクラス、IDなどを指定することでDOMの要素を取得することができます。

h1タグを指定して、要素を取得する。

$doc["h1"]->text();


post-dateクラスを指定して、要素を取得する。
$doc[".post-date"]->text();


main IDを指定して、要素を取得する。
$doc["#main"]->text();

今回のスクレイピングではクラスを指定します。クラスはサイトの複数箇所に指定されており、タイトルと更新日はそれぞれ最初の要素でしたので、次のような記述になります。

$doc[".entry-title:first"]->text();


もしくはfirstの代わりに0番目と指定することもできます。

$doc[".entry-title:eq(0)"]->text();

タグ、クラス、ID以外に属性やフィルタを指定することもできます。必要に応じて、次のリンクを参考にしてください。

タイトルを取得してファイルに書き込む

テキストファイルtest.txt作成して、取得してきたタイトルを書き込みます。(ファイルに書き込んだ際の見通しを良くするため、改行コード「\n」を付与しています。)

file_put_contents関数は文字列をファイルに書き込むことができるPHPの関数です。ファイルが存在しない場合はファイルを作成し、存在する場合はそのファイルを上書きします。test.txtは存在しないので、作成されます。

$title = $doc[".entry-title:first"]->text();
file_put_contents("test.txt", $title . "\n");

更新日を取得してファイルに書き込む

更新日を取得して、作成済みのtest.txtを開き、更新日を書き込みます。書き込み終えたら、test.txtを閉じます。

fopen関数、fwrite関数、fclose関数もPHPが用意している関数でそれぞれファイルを開く、ファイルに書き込む、ファイルを閉じる際に使われます。

$postDate = $doc[".post-date:first"]->text();

$file = fopen("test.txt", "a");
fwrite($file, $postDate);
fclose($file);

これでスクレイピングの準備ができました。macをお使いの方はターミナルを、windowsをお使いの方はコマンドプロンプトを開いて、index.phpとphpQuery-onefile.phpがあるディレクトリに移動して、次のようにPHPを実行してください。

php index.php

同じディレクトリ内に新たにtest.txtが作成され、次のようにテキストが書き込まれます。

【業界初】プログラミング学習サービスのカオスマップ2018年版を”tech boost”が公開!
2018.11.28

phpQueryを使ってスクレイピングしてみよう

phpQueryを使ってスクレイピングを行う手順を解説しました。

スクレイピングをうまく利用すれば、人がやっている作業を自動化できます。日々の業務で手動でサイトを開いて、情報を取得している作業などは1度PHPを書いてしまえば、あとはコマンド1つで情報を取得することができます。

人が作業をするより自動で正確に速く作業をすることが可能になるので、活用してみてください。

【PR】多くの人がプログラミングを諦めてしまう理由をご存知ですか?



近年プログラミングを勉強する人が増えています。

プログラミング学習者の多くは独学から取り組もうとしますが、だいたい80%ほどは3ヶ月も続かずに諦めてしまいます。早い人は1日目で。

多くの人がプログラミングを独学しようとして諦める理由は、次の3つ。
●モチベーションが維持できない
●エラーの原因・解決方法が分からない
●どう学習すればよいか分からない

TechBoostというプログラミングスクールでは、みんなと一緒にプログラミングをするのでモチベーションの維持ができ、分からないことがあればマンツーマンで教えてくれ、徹底的に研究された初心者向けの教材が揃っています。

TechBoostを卒業後、実際にエンジニアとして転職した方もいるほど。

本気でプログラミングを学びたい方は、一度無料のカウンセリングでご相談ください。プログラミングを嫌いになる前に。

tech boostについて

オーダーメイド型の学習コンテンツを提供する「tech boost」 は、エンジニアのキャリア支援に特化したサービスを複数展開している株式会社Branding Engineerが運営しているプログラミングスクールです。最短3ヶ月間で、未経験から『プログラミングの基礎』、『実際に業務で必要となるスキル』、『今のトレンドとなっている知識』まで学べ、ご希望の方にはプロのキャリアアドバイザーによる就業支援を行うことができます。

tech boost卒業生インタビュー

tech boostの卒業生の声を聞きました。あなたがプログラミングを学びたい理由を、一度考えてみてください。
営業→Javaエンジニア→Rubyエンジニアと転向し、第一志望のFinTech企業で働く山下さん
元営業、ビジネスのわかるエンジニアを目指す菅原さん
サンフランシスコに交換留学し、シリコンバレーのVCでインターン中の梅本さん
予備校の営業から半年でエンジニア転職を果たした小田島さん

tech boostの口コミ



Related