灵活的网站爬虫,将结果存储在持久存储中

安装: 598

依赖: 1

建议者: 0

安全: 0

星星: 0

分支: 1

类型:symfony-bundle

v2.4.0 2024-02-20 23:27 UTC

README

内容导入过程非常复杂且不可预测。特别是爬取阶段。其主要原因在于存在大量可能的不同场景。

  • 某些网站可能运行在不安全的HTTP协议上/它们可能使用无效的SSL证书。
  • 某些页面上可能存在一些损坏的链接。
  • 某些源网站可能存在需要忽略/跟随的特殊重定向。
  • 对于某些网站,爬虫需要遵守特殊的限制:每秒请求次数、超时等。
  • 有时不需要爬取所有链接,而是特定的链接:菜单中的链接、主要内容中的链接等。
  • 某些网站部分应该被忽略爬取,或者只针对特定的网站部分进行爬取。
  • 爬取网站可能涉及多个域/协议。

显然,创建一个能够处理所有可能情况的爬虫是不现实的。这就是我们专注于创建一个灵活的爬虫的原因。因此,它允许通过提供的配置来处理所有列出的场景。

此爬虫将数据存储在持久存储(数据库)中。它被设计用于内容导入。但它是独立的组件,可能在任何其他用例中使用。它的唯一目的是爬取网站并将爬取页面的元数据存储在持久存储中。爬取页面的元数据可以用于任何目的:导入/分析/任何自定义功能。

安装

  1. 使用 composer 安装 contextualcode/crawler

     composer require contextualcode/crawler
    
  2. 运行迁移

     php bin/console doctrine:migrations:migrate --configuration=vendor/contextualcode/crawler/src/Resources/config/doctrine_migrations.yaml --no-interaction
    

用法

本节描述了基本用法概念。请查阅 用法示例参考 页面以获取技术细节。

使用流程如下

  1. 实现爬虫处理器。

    它应该是一个扩展 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';
         }
     }
    
  2. 运行 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
    
  3. 分析和使用爬取页面的元数据。

    上一步骤中的命令将在数据库中填充 ContextualCode\Crawler\Entity\Page 实体。它们可用于内容导入或任何其他自定义功能。有关这些实体中存储的数据的详细说明,请参阅 参考