vdb/php-spider

一个可配置和可扩展的PHP网络爬虫

安装次数: 152 104

依赖项: 7

建议者: 0

安全性: 0

星标: 1 329

关注者: 86

分支: 234

类型:application

v0.7.2 2023-12-10 20:02 UTC

README

Build Status Latest Stable Version Total Downloads License

PHP-Spider特性

  • 支持两种遍历算法:广度优先和深度优先
  • 支持限制爬取深度、队列大小和最大下载次数
  • 支持基于XPath、CSS选择器或纯PHP添加自定义URI发现逻辑
  • 提供一组有用的URI过滤器,如robots.txt和域名限制
  • 支持自定义URI过滤器,包括预取(URI)和后取(资源内容)
  • 支持自定义请求处理逻辑
  • 支持Basic、Digest和NTLM HTTP身份验证。请参见示例
  • 提供一组有用的持久性处理器(内存、文件)
  • 支持自定义持久性处理器
  • 收集爬取统计信息以供报告
  • 分发有用的事件,允许开发人员添加更多自定义行为
  • 支持礼貌策略

此爬虫不支持JavaScript。

安装

安装PHP-Spider最简单的方法是使用composer。在Packagist上找到它。

$ composer require vdb/php-spider

用法

这是一个非常简单的示例。此代码可以在example/example_simple.php中找到。有关带有一些日志记录、缓存和过滤器的更完整示例,请参阅example/example_complex.php。该文件包含一个更真实世界的示例。

请注意,默认情况下,当爬虫遇到4XX或5XX错误响应时,会停止处理。要设置爬虫继续处理,请参阅链接检查示例。它使用自定义请求处理器,配置默认的Guzzle请求处理器,以便在4XX和5XX响应上不失败。

首先创建爬虫

$spider = new Spider('http://www.dmoz.org');

添加URI发现器。没有它,爬虫将不会执行任何操作。在这种情况下,我们希望从某个

中的所有节点开始。

$spider->getDiscovererSet()->set(new XPathExpressionDiscoverer("//div[@id='catalogs']//a"));

为此示例设置一些合理的选项。在这种情况下,我们只从起始页面获取前10个条目。

$spider->getDiscovererSet()->maxDepth = 1;
$spider->getQueueManager()->maxQueueSize = 10;

添加一个监听器以收集爬虫和队列管理器的统计信息。还有更多可以用于派发事件的组件。

$statsHandler = new StatsHandler();
$spider->getQueueManager()->getDispatcher()->addSubscriber($statsHandler);
$spider->getDispatcher()->addSubscriber($statsHandler);

执行爬取

$spider->crawl();

爬取完成后,我们可以获得一些关于爬取的信息

echo "\n  ENQUEUED:  " . count($statsHandler->getQueued());
echo "\n  SKIPPED:   " . count($statsHandler->getFiltered());
echo "\n  FAILED:    " . count($statsHandler->getFailed());
echo "\n  PERSISTED:    " . count($statsHandler->getPersisted());

最后,我们可以对下载的资源进行一些处理。在这个例子中,我们将输出所有资源的标题

echo "\n\nDOWNLOADED RESOURCES: ";
foreach ($spider->getDownloader()->getPersistenceHandler() as $resource) {
    echo "\n - " . $resource->getCrawler()->filterXpath('//title')->text();
}

贡献

贡献PHP-Spider就像在Github上Fork存储库并提交一个Pull Request一样简单。Symfony文档包含一个优秀的指南,说明如何正确地这样做:[提交补丁](https://symfony.ac.cn/doc/current/contributing/code/patches.html#step-1-setup-your-environment)。

有一些要求必须满足才能接受Pull Request。

  • 遵循编码标准:PHP-Spider 遵循以下编码标准指南:PSR-0(《PSR-0》)、PSR-1(《PSR-1》)和 PSR-2(《PSR-2》);
  • 通过单元测试证明代码能够正常工作,并保持代码覆盖率100%;

注意:检查您的代码是否符合 PHP-Spider 的标准,可以通过运行本仓库中的脚本 bin/static-analysis 来实现。这将运行以下工具,并针对 PHP-Spider 进行配置:PHP CodeSniffer、PHP Mess Detector 和 PHP Copy/Paste Detector。

注意:为了使用 PHPUnit 并实现覆盖率检查,确保覆盖率等于100%,可以运行 bin/coverage-enforce

支持

对于报告错误和请求新功能等问题,最佳做法是在 GitHub 上创建一个 问题,并最好附上一个 Pull Request。:-)

许可证

PHP-Spider 使用 MIT 许可证。