c2is / walker
围绕 Goutte 的基本包装,用于爬取网站
dev-master
2013-09-25 08:02 UTC
Requires
- php: >=5.4.0
- fabpot/goutte: 1.0.*@dev
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");