

こんにちは。

laravel5+goutteを使ってゴリゴリ情報収集するツール的なものを書いているのですが、  
一部サイトでは、ページネーションの設定にaタグにclassを使わずにmode="next"などの特殊な属性で指定している物があり、次ページへのURLを取れずに苦戦しています。

取得先のHTML

[code]

    <div id="pagenation">
        <ul>
            <li>
                <a mode="prev" href="hogehoge/1">もどる</a>
            </li>
            <li>
                <a mode="current" href="hogehoge/2">-</a>
            </li>
            <li>
                <a mode="next" href="hogehoge/3">すすむ</a>
            </li>
        </ul>
    </div>
    
[/code]

取得用コード

[code]

    $url = $crawler->filter('div.pagenation')->filter("a[rel='next']")->attr('href');
    
[/code]

aタグにnameなどがあればselectLink()を使う代用案も考えていたのですが、  
現時点では、filter部分でのcssセレクタをうまく使う方法が無いか悩んでいます。

お知恵を貸していただけませんでしょうか


CC BY-SA 3.0
2016-08-14T02:33:07.820
28247
2016-08-14T05:16:08.103
2016-08-14T05:10:25.187
18398
18398
question
php laravel-5 web-scraping
goutteでcss属性セレクタが使えない場合の対処


自己解決しました。  
CSS属性セレクタは使わずまわりくどいですが、foreachを使って  
条件判定をしつつ、Aタグの中身を評価して一致したらnextと同義であるという考えにしました。

[code]

     $crawler->filter('ul')->each(function ($row) use (&$URI) {
          $row->filter('li')->each(function ($pagenate) use (&$URI) {
               if ($pagenate->text() == 'すすむ') {
                    $URL = $pagenate->filter('a')->attr('href');
               }
          });
     });
    
[/code]


CC BY-SA 3.0
2016-08-14T05:16:08.103
28250
2016-08-14T05:16:08.103
18398
28247
answer