goutteを使ったスクレイピング


goutteを使ったスクレイピングについて勉強しています。

例えば、はてなブックマークの「テクノロジー」カテゴリのホットエントリーのリストを取得してみようといろいろ試行錯誤していますがうまくいきません。

例えば、ページ上の「.entry-link」クラスを取得すればエントリーのリンクを取得できます。

[code]

    $crawler = $client->request('GET', 'http://b.hatena.ne.jp/hotentry/it');
    
    $crawler->filter('.entry-link')->each(function ($node) {
        echo $node->html() . "\n";
    });
    
[/code]

しかしこの場合は、ホットエントリー以外にも下部にある「人気エントリー」も抽出されてしまうため、上部のリストのみとりたいのですがどうすればうまく指定できるかわかりません。

何れも「box_section」クラスの中に存在しているので、「box_section」の一つ目にふくまれる「entry-
link」を抽出するように指定するべきだと思うのですが、うまくいきません。

試しに以下のようにしていましたがやはりだめでした。

[code]

    $box = $crawler->filter('.box_section');
    
    $box->filter('.entry-link')->each(function ($node) {
        echo $node->text() . "\n";
    });
    
[/code]

どのように絞り込めばよいのでしょうか？




はてなブックマークの見方が分からないので、見当違いかもしれませんが・・・

参考URL下部の新着エントリーを読むボタン下、  
「人気エントリー - プログラミング」以降を除外した記事のタイトルということですと

[code]

    $crawler->filter(".box-wrap:nth-child(2) .entry-link")->each(function($node) {
        echo $node->html().PHP_EOL;
    });
    
[/code]

で取得できますよ。




はてなブックマークの見方が分からないので、見当違いかもしれませんが・・・

参考URL下部の新着エントリーを読むボタン下、  
「人気エントリー - プログラミング」以降を除外した記事のタイトルということですと

[code]

    $crawler->filter(".box-wrap:nth-child(2) .entry-link")->each(function($node) {
        echo $node->html().PHP_EOL;
    });
    
[/code]

で取得できますよ。

