質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Q&A

解決済

1回答

3101閲覧

Goutteでエラー

chNOBUNAGA

総合スコア41

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

0グッド

1クリップ

投稿2017/05/12 12:41

PHP

1<?php 2require_once '../../vendor/autoload.php'; 3$url = 'https://soccer.yahoo.co.jp/jleague/teams/players/276'; 4$client = new Goutte\Client(); 5$t=''; 6$l=''; 7$i=0; 8$tmps=array(); 9$crawler = $client->request("GET", $url); 10$crawler->filter("div.partsTable table td a")->each(function ($node) use (&$links){ 11$links2=$node->attr("href"); 12//選手名 13$tmps[$i]=$node->text(); 14$i++; 15$url_detail = 'https://soccer.yahoo.co.jp'.$links2; 16$client_detail = new Goutte\Client(); 17$crawler_detail = $client_detail->request("GET", $url_detail); 18$crawler_detail->filter("tr.last td.textC")->each(function ($node_detail) use (&$links){ 19$tmps[$i]=$node_detail->text(); 20$i++; 21}); 22}); 23var_dump($tmps); 24exit; 25$player_data = substr($tmps, 0, -1); 26$player=explode(',',$player_data); 27var_dump($player); 28?>

こちらをやろうとしましたが、
下記のエラーが出てしまいます。
なぜでしょう?

Notice: Undefined variable: i in......... on line 13
Notice: Undefined variable: i in......... on line 14
Notice: Undefined variable: i in......... on line 19
Notice: Undefined variable: i in......... on line 20
Notice: Undefined variable: i in......... on line 19
Notice: Undefined variable: i in......... on line 20
Notice: Undefined variable: i in......... on line 19
Notice: Undefined variable: i in......... on line 20Notice: Undefined variable: i in......... on line 19
Notice: Undefined variable: i in......... on line 20Notice: Undefined variable: i in......... on line 19
Notice: Undefined variable: i in......... on line 20Notice: Undefined variable: i in......... on line 19
Notice: Undefined variable: i in......... on line 20Notice: Undefined variable: i in......... on line 19
Notice: Undefined variable: i in......... on line 20Notice: Undefined variable: i in......... on line 19
Notice: Undefined variable: i in......... on line 20Notice: Undefined variable: i in......... on line 19
Notice: Undefined variable: i in......... on line 20

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

$crawler->filter("div.partsTable table td a")->each(function ($node) use (&$links){
$iはこのクロージャーの親スコープで定義されているため、use()で渡さないとクロージャーの中では使えません。

投稿2017/05/12 13:16

coba-coba

総合スコア1409

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

chNOBUNAGA

2017/05/12 13:49

すいません。 知識があまりありません。 具体的にどのようにuseを使えばよろしいのでしょうか?
chNOBUNAGA

2017/05/13 02:23

useの使用があまりうまくできなかったので <?php $insert_data=''; function insert_array($data){ $insert_data.=$data; } require_once '../../vendor/autoload.php'; $url = 'https://soccer.yahoo.co.jp/jleague/teams/players/276'; $client = new Goutte\Client(); $t=''; $l=''; $crawler = $client->request("GET", $url); $crawler->filter("div.partsTable table td a")->each(function ($node){ $tmps=''; $links2=$node->attr("href"); //選手名 $player_name=$node->text(); insert_array($player_name); $url_detail = 'https://soccer.yahoo.co.jp'.$links2; $client_detail = new Goutte\Client(); $crawler_detail = $client_detail->request("GET", $url_detail); $crawler_detail->filter("tr.last td.textC")->each(function ($node_detail){ $l=$node_detail->text(); insert_array($l); }); }); var_dump($insert_data); exit; $player_data = substr($tmps, 0, -1); $player=explode(',',$player_data); var_dump($player); ?> このように直しましたが、 Notice: Undefined variable: insert_data in ..... on line 4 と出ます。初期化もしていますが、やはりクロージャーが関係しているのでしょうか?
coba-coba

2017/05/13 05:21

> $insert_data.=$data; 不要なドット「 . 」が入ってますね。 それを削除してください。 コードが短いので、私も追って見てみます。
chNOBUNAGA

2017/05/13 05:37

すいません。 Useを使ったらできました 。 ありがとうございます。
coba-coba

2017/05/13 05:44

できてよかったです。 念のため注意事項ですが、 - 情報を取得するウェブサイトにひと声かける - 短時間での連続したクローリングを避ける( sleep(5); などとして) ということには注意してくださいね。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問