6500


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]

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


CC BY-SA 3.0
2015-02-14T13:59:38.097
6485
2015-02-14T23:16:53.460
2015-02-14T14:47:40.480
33
8188
question
php web-scraping
goutteを使ったスクレイピング


Goutte の filter は CSS セレクタ で指定するはずですので、

[code]

    $box->filter('.entry-link:nth-child(2)')
    
[/code]

という指定を入れるか、

[code]

    $box->filter('.entry-link')
    
[/code]

でフィルタリングした要素を全て取得してオブジェクトまたは配列に入れ込み、  
抽出してしまうのがいいかなと思います。


CC BY-SA 3.0
2015-02-14T14:08:05.727
6486
2015-02-14T14:08:05.727
7641
6485
answer


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

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

[code]

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

で取得できますよ。


CC BY-SA 3.0
2015-02-14T23:16:53.460
6500
2015-02-14T23:16:53.460
4271
6485
answer