11
13

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

クローラー/WebスクレイピングAdvent Calendar 2015

Day 14

とりあえずPHPでWebスクレイピングしてみたい人向けパッケージ

Last updated at Posted at 2015-12-13

この記事はクローラー/Webスクレイピング Advent Calendar 2015の14日目です。

Guttieというライブラリを使って、更にラッパーパッケージPickUrlを作りました。
このライブラリは特定サイトのドメインを基準にしWebクロールを行っていきます。
※不具合等ありましたらpullリクエストお待ちしております。

PickUrl

動作必要条件

  • PHP 5.5+

導入方法

composer.jsonのrequireに追加

composer.json
{
    "require": {
        "dimgraycat/pickurl": "*"
    }
}

インストール

$ php composer.phar install

使い方

sample.php
<?php

require_once __DIR__ . '/vendor/autoload.php';

$spider = new PickUrl\Spider();
$spider->setUserAgent('MyCrawler/1.0.0');
$spider->setWaitTime(1);  // 設定しない場合、デフォルトで10秒
$spider->addHook('before', function($crawler, $crawl_url) {
    /*
     * $crawler:goutteのインスタンス
     * $crawl_url:これからクロールするURL
     */
    print "$crawl_url\n";
});
$spider->addHook('after', function($crawler, $crawl_url, $searched_urls) {
    /*
     * $crawler:goutteのインスタンス
     * $crawl_url:クロールしたURL
     * $searched_urls:クロールしたサイトに存在したURL一覧
     */
    print_r($searched_urls);
});

/*
 * 指定したURLのドメイン配下をクロールする
 * 今回はqiita.com配下をクロールします
 * クロールが終われば終了する
 * * 外部ドメインはクロールしません
 */
$spider->crawl('http://qiita.com/');

以下実行結果

http://qiita.com/
Array
(
    [0] => http://qiita.com/about
    [1] => https://qiita.com/sessions/forgot_password
    [2] => https://qiita.com/auth/github
    [3] => https://qiita.com/auth/twitter
    [4] => http://qiita.com/terms
    [5] => http://b.hatena.ne.jp/entry/http://qiita.com
    [6] => https://twitter.com/share
    [7] => http://kobito.qiita.com?utm_source=qiita&utm_medium=top
    [8] => https://teams.qiita.com?utm_source=qiita&utm_medium=top
    [9] => https://career.qiita.com?utm_source=qiita&utm_medium=top
    [10] => http://increments.co.jp
    [11] => https://qiita.com/terms
    [12] => https://qiita.com/privacy
    [13] => http://help.qiita.com
    [14] => https://increments.zendesk.com/anonymous_requests/new
    [15] => https://qiita.com/about
    [16] => http://blog.qiita.com
    [17] => https://qiita.com/api/v2/docs
    [18] => https://teams.qiita.com/
    [19] => http://kobito.qiita.com
    [20] => http://career.qiita.com
    [21] => http://qiita.com/
)
http://qiita.com/about
Array
(
    [0] => http://ja.wikipedia.org/wiki/markdown
    [1] => http://kobito.qiita.com/
    [2] => http://qiita.com/organizations/beartail
    [3] => http://qiita.com/organizations/eversense
    [4] => http://qiita.com/organizations/beatrobo
    [5] => http://qiita.com/organizations/cheekit
    [6] => http://qiita.com/organizations/mixi
    [7] => http://qiita.com/organizations/liginc
    [8] => http://qiita.com/organizations/yumemi
    [9] => http://qiita.com/organizations/m3dev
    [10] => http://qiita.com/organizations/moneyforward
    [11] => http://qiita.com/organizations/kddi
    [12] => http://qiita.com/organizations/richlab
    [13] => http://qiita.com/organizations/fablic
    [14] => http://qiita.com/organizations
    [15] => http://increments.co.jp
    [16] => http://qiita.com/terms
    [17] => http://qiita.com/privacy
    [18] => http://help.qiita.com
    [19] => https://increments.zendesk.com/anonymous_requests/new
    [20] => http://qiita.com/about
    [21] => http://blog.qiita.com
    [22] => http://qiita.com/api/v2/docs
    [23] => https://teams.qiita.com/
    [24] => http://kobito.qiita.com
    [25] => http://career.qiita.com
    [26] => http://qiita.com/
)
... etc ...

addHook

addHookメソッドにはクロールする前(before)とクロールした後(after)を指定して、
クロージャーを記載します。

クロージャーの指定引数:
before : $crawler, $crawl_url
after  : $crawler, $crawl_url, $searched_urls

beforeの場合は特定サイト配下にあるURLはcrawl_urlで取得できるので、
取得したURLをDBなどに入れる処理を書くことをおすすめします。

afterの場合はcrawl_urlにある全てのURLをsearched_urlsで取得できます。

その他

  • 引数のcrawlerに関しては、
    Goutteの記事が沢山ありますのでそちらをqiitaで検索してみると良いかもしれません
  • pullリクエストお待ちしております
11
13
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
11
13

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?