Goutte Web スクレイピング

ログインが必要な Goutte ファイル作成

ログインが必要なサイトに入りスクレイピングをする Goutte ファイル
scraping-sakusibbs-getfav2.php
を作成します。
作成ファイル内容は、
63Pear Village に戻り
左サイドナビ「PHPlot グラフ表示」の中の
ログインが必要な Goutte PHP ファイル
から見てください。
まずは、スクレイピングしたい WEB サイトの URL を設定するのですが、ログインが必要なサイトですので、 ログイン URL
$top_page_url = "https://uta.pw/sakusibbs/users.php?action=login";
を対象URLとします。
どんなログイン画面なのか取り敢えず見てみましょう。
作詩掲示板ログインのお願い
このログイン画面は、ユ-ザ名、パスワ-ド、の入力欄があって、ログインボタンがある、 いたってオ-ソドックスな構成になっています。
ここの入力欄に入れるログインIDとパスワ-ドが必要です。
$user_id = 'JS-TESTER';
$password = 'ipCU12ySxI';
と設定します。
と簡単に書いていますが、実はこれは、クジラ飛行机さんがテスト、学習用に提供されているアカウントです。
あくまでも善意で公開されています。
決して悪用しないようにお願いします。
勝手なことを書き込むようなことはしないでください。
次の
$client = new Client();
$client->setClient(new \GuzzleHttp\Client( array(\GuzzleHttp\RequestOptions::VERIFY => false,) ));
$crawler = $client
-> request('GET',$top_page_url);
echo "ログインページを取得しました<br>";
までの内容は
単純な Goutte ファイル作成 のところで詳しく説明しました。
これで準備完了です。

フォームにユーザー名とパスワードをセットして送信

ログイン画面を取得できましたので、 ログインフォ-ムにある「ログイン」というボタンを探してそのボタンを含むフォ-ムを取得します。
$form = $crawler
-> selectButton('ログイン')
-> form();
次ぎに、フォームにユーザー名とパスワードをセットして submit メソッドで送信します。
$crawler = $client
-> submit($form, array(
'username_mmlbbs6' => $user_id,
'password_mmlbbs6' => $password));
このログインフォ-ムの
ユーザー名の<input>タグの name 属性の値は 'username_mmlbbs6'
パスワ-ドの <input>タグの name 属性の値は 'password_mmlbbs6'
ですので、これを連想配列で設定しました。

ログイン後マイページのリンクを探す

ログインしたら、マイページのリンク
→ [(ユーザー名)さんのマイページ]
と表示されているを探します。


マイページリンク画面

一旦 $mypage_url = "";
としておき、Goutte 得意の無名関数を使って、マイページへのリンクアドレスを探します。
$crawler
-> filter('a')
-> each(
function($e)use(&$mypage_url) {
・・・・・・・・
}
$mypage_url は function($e) から見ると外部変数なので use で 参照(&付)渡します。
$label = $e -> text();
PHP 関数 strpos( )を使って、'のマイページ' のワ-ドを探します。
strpos は文字列内の部分文字列が最初に現れる場所を見つけます。
文字列 $label の中で、'のマイページ' が最初に現れる位置を探します。
'のマイページ' が見つかった位置を、文字列の先頭からの相対位置で返してくれます。
この時、先頭は 0 であり、1 ではありません。
見つからない場合は FALSE を返します。
if (strpos($label, 'のマイページ') !== FALSE) {
$mypage_url = $e -> extract('href');
echo "<br>My Page URL =<br>".$mypage_url[0]."<br><br>";
}
extract メソッドはタグの属性を取り出してくれるのでした。
この時、マイペ-ジのリンク先は、$mypage_url[0] に格納されています。
if ($mypage_url == "") {
echo 'NG:ログインできていません。';
exit;
}
$mypage_url == "" のままならばログインできていないことになります。

マイページにアクセスしてスクレイピングする

それでは、'JS-TESTER'さんのマイページにアクセスして「最近お気に入りの作品」をスクレイピングします。
$crawler = $client
-> request('GET', $mypage_url[0]);
$favlist = array();
「最近お気に入りの作品」の内容は、
<ul id='favlist'><li>・・・</li>
のタグの中にあります。
よって、フィルタメソッドを使って、
$crawler
-> filter('ul#favlist > li')
-> each(
function($e) use (&$favlist){
$a = $e->filter('a');
$text = $a->text();
ここまでで、a タグを探してそのテキスト文(最近お気に入りの作品名) を $text に取り込みました。
$link = "";
$o = $a -> extract(array('href'));
extract( )メソッドを使用するとタグの属性を取り出すことができました。
'href'の属性を知りたい時は、 extract(array('href')); とすれば良いのです。
よって、最初に見付けた'href'の属性が各作品へのアクセス先ですから
$link = $o[0];
$favlist[] =
$text."<br>&emsp;".$link."<br>";
});
後は、配列を連結して、結果を表示します。
echo "<br>---- 結果を表示 -----<br><br>";
echo implode($favlist);

ここまでで、ログインが必要な Goutte ファイル作成は完了です。
引き続き、複雑なログインが必要な Goutte ファイル作成をしていきます。


ログインが複雑な Goutte ファイル作成 に進む
単純な Goutte ファイル作成 に戻る

63PearVillage に戻る