contextualcode / crawler
灵活的网站爬虫,将结果存储在持久存储中
v2.4.0
2024-02-20 23:27 UTC
Requires
- php: >=7.3.0
- ext-curl: *
- ext-dom: *
- ext-json: *
- ext-libxml: *
- ext-mbstring: *
- doctrine/doctrine-bundle: ^2.1
- doctrine/doctrine-migrations-bundle: ^3.0
- doctrine/orm: ^2.7
- monolog/monolog: ^2.0
- symfony/console: >=5.0
- symfony/doctrine-bridge: >=5.0
- symfony/monolog-bundle: ^3.0
Requires (Dev)
- friendsofphp/php-cs-fixer: ^2.16
README
内容导入过程非常复杂且不可预测。特别是爬取阶段。其主要原因在于存在大量可能的不同场景。
- 某些网站可能运行在不安全的HTTP协议上/它们可能使用无效的SSL证书。
- 某些页面上可能存在一些损坏的链接。
- 某些源网站可能存在需要忽略/跟随的特殊重定向。
- 对于某些网站,爬虫需要遵守特殊的限制:每秒请求次数、超时等。
- 有时不需要爬取所有链接,而是特定的链接:菜单中的链接、主要内容中的链接等。
- 某些网站部分应该被忽略爬取,或者只针对特定的网站部分进行爬取。
- 爬取网站可能涉及多个域/协议。
显然,创建一个能够处理所有可能情况的爬虫是不现实的。这就是我们专注于创建一个灵活的爬虫的原因。因此,它允许通过提供的配置来处理所有列出的场景。
此爬虫将数据存储在持久存储(数据库)中。它被设计用于内容导入。但它是独立的组件,可能在任何其他用例中使用。它的唯一目的是爬取网站并将爬取页面的元数据存储在持久存储中。爬取页面的元数据可以用于任何目的:导入/分析/任何自定义功能。
安装
使用
composer
安装contextualcode/crawler
composer require contextualcode/crawler
运行迁移
php bin/console doctrine:migrations:migrate --configuration=vendor/contextualcode/crawler/src/Resources/config/doctrine_migrations.yaml --no-interaction
用法
本节描述了基本用法概念。请查阅 用法示例 和 参考 页面以获取技术细节。
使用流程如下
实现爬虫处理器。
它应该是一个扩展
ContextualCode\Crawler\Service\Handler
的PHP类。它有很多灵活的配置选项,在 参考 中描述。最简单的爬虫处理器需要提供导入标识符和网站域名<?php namespace App\ContentImport; use ContextualCode\Crawler\Service\Handler as BaseCrawlerHandler; class CrawlerHandler extends BaseCrawlerHandler { public function getImportIdentifier(): string { return 'unique-identifier'; } public function getDomain(): string { return 'www.site-to-crawl.com'; } }
运行
crawler:run
命令。此命令需要唯一的参数:在上一步骤中定义的爬虫标识符。有关此命令的更详细描述,请参阅 参考
php bin/console crawler:run unique-identifier To get live logs, please run the following command in a new terminal: tail -f /XXX/var/log/contextualcode-crawler.log Running the crawler ... ======================= Url: http://www.site-to-crawl.com/ Referer: 282/282 [▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓] 100% 7 secs/7 secs All links are processed: * 281 valid links * 1 invalid links
分析和使用爬取页面的元数据。
上一步骤中的命令将在数据库中填充
ContextualCode\Crawler\Entity\Page
实体。它们可用于内容导入或任何其他自定义功能。有关这些实体中存储的数据的详细说明,请参阅 参考