dev-lazy
dev-lazyTemplate collector
Apache-2.0
The Requires
The Development Requires
by tao
dev-master
9999999-devTemplate collector
Apache-2.0
The Requires
The Development Requires
by tao
Template collector
通用模板采集器基本组件, (*1)
要求, (*2)
基于composer安装, (*3)
composer require slince/template-collector *@dev
或者安装到全局目录, (*4)
composer global require slince/template-collector *@dev
collector capture [目标网址]
例:, (*5)
collector capture http://demo.sc.chinaz.com/Files/DownLoad/moban/201604/moban1178/index.html
查看使用帮助, (*6)
collector capture --help
你最好将vendor/bin目录添加到全局路径下,否则可能无法查找到命令, (*7)
use Slince\Collector\Collector; use Slince\Event\Event; $savePath = __DIR__ . '/html'; //模板保存路径 $entranceUrl = 'http://demo.sc.chinaz.com/Files/DownLoad/moban/201604/moban1178/index.html'; //入口链接 //创建采集器 $collector = new Collector($savePath, $entranceUrl); //绑定事件 $collector->getDispatcher()->bind(Collector::EVENT_CAPTURED_URL_REPOSITORY, function(Event $event){ $repository = $event->getArgument('repository'); echo $repository->getUrl()->getUrlString() . " Captured OK!\r\n"; }); $collector->run();
事件绑定是可选的,如果不绑定事件采集器依然可以正常进行,但如果您需要知道采集器进度,绑定事件是个不二的选择;目前采集器
支持三种事件
- Collector::EVENT_FILTERED_URL
url筛选结束事件,当采集器判断完成一个新链接是否需要被处理的时候触发
- Collector::EVENT_CAPTURE_URL_REPOSITORY
开始采集页面事件,当链接内容下载完毕开始处理采集时触发
- Collector::EVENT_CAPTURED_URL_REPOSITORY
页面采集完成事件,当链接内容采集完毕时触发, (*8)
为了避免采集器过分采集,默认情况下采集器不会抓取host和入口链接的host不符的链接,所以如果你要采集的网站的资源文件使用了 其它域名,那么您需要设置允许抓取的host, (*9)
$collector->setAllowedCaptureHosts([ ... ]);
如果您要采集的网站同类型链接过多,那么您可以设置采集规则避免重复下载, (*10)
$collector->setUrlPatterns([ 'category' => '#/categories/\d+#', 'product' => '#/products/\d+#', 'article' => '#/articles/\d+#', ]);
如果符合采集规则的url没有文件扩展名,那么在生成本地文件的时候会采用采集规则的键名做文件名,比如例中的分类页 在下载到本地的时候会使用category.html做文件名, (*11)
如果您需要只下载符合采集规则的url,那么您需要做个设置, (*12)
$collector->setOnlyCaptureUrlPatterns(true);
$collector->setBlacklistUrls([ ... ]); $collector->setWhitelistUrls([ ... ]);
建议在终端环境执行程序,否则可能会因为采集周期过长导致采集失败, (*13)
Template collector
Apache-2.0
Template collector
Apache-2.0