c2is/walker

围绕 Goutte 的基本包装,用于爬取网站

安装: 28

依赖: 0

建议者: 0

安全: 0

星标: 0

关注者: 4

分支: 0

开放问题: 0

类型:application

dev-master 2013-09-25 08:02 UTC

This package is not auto-updated.

Last update: 2024-09-14 14:56:53 UTC


README

一个简单的 Goutte 包装,用于爬取整个网站并获取每个页面的统计信息

  • 状态,
  • 指向它的页面,
  • 如果使用 run() 方法实现您的需求,还可以捕获其他信息。

Walker 获取所有 "a href" 值来构建其爬取,因此存在一个扩展排除机制以忽略不相关的元素,例如图像。有关更多信息,请参阅下方的参数部分。

默认情况下,爬取绑定到指定的子域,但构造函数的第二个参数允许您定义可以爬取的其他子域。正则表达式定义了允许的子域,例如允许任何子域

$walker = new \Walker\Walker("http://www.somewebsite.fr", ".*");

用法

在您的 composer.json 中将 Walker 添加到 "require" 块中

{
    "require": {
        "c2is/walker" : "dev-master"
    },
    "minimum-stability": "dev",
    "autoload": {
        "psr-0": {
            "": "src/"
        }
    },
}

运行 composer update

php ./composer.phar update

实例化爬虫,开始爬取并在过程结束后输出统计信息

$walker = new \Walker\Walker("http://www.somewebsite.fr");
$walker -> start();
echo "<pre>".implode(" | ", $walker->storage->getColumns("stats"));
foreach($walker->storage->get("stats") as $stats){
    printf("\n%s | %s | %s",$stats["URL"], $stats["STATUS"], $stats["CALLED IN"]);
}
echo "</pre>";

如果您希望在爬取过程中实时获取更多信息或执行更多操作,可以将匿名函数传递给 run() 方法

echo "<pre>".implode(" | ", $walker->storage->getColumns("stats"))." | LAST MODIF";
$walker -> run(function ($crawler, $client) {
    $lastMod = $client->getResponse()->getHeader("last-modified");
    $stats = $client->getStats();
    printf("\n%s | %s | %s| %s",$stats["URL"], $stats["STATUS"], $stats["CALLED IN"], $lastMod);
    flush();
});
echo "</pre>";

参数

您可以使用 setConfiguration() 方法覆盖配置,例如

$walker->setConfiguration("httpClientOptions",['curl.options' => array(
        CURLOPT_TIMEOUT      => 150
    )]
);
$walker->setConfiguration("excludedFileExt","`\.(jpg|jpeg|gif|png)$`i");