首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Laravel项目中放一个Crawler脚本到哪里?

在Laravel项目中放一个Crawler脚本到哪里?
EN

Stack Overflow用户
提问于 2018-11-20 18:50:20
回答 1查看 1.8K关注 0票数 0

我已经创建了一个非常简单的PHP爬虫,我想在Laravel项目中实现它。我不知道该把它放在哪里。我想启动脚本并在应用程序运行时运行它。

我知道它不应该在控制器中,也不应该在Cron计划中,所以有什么建议要把它设置在哪里呢?

代码语言:javascript
复制
$homepage = 'https://example.com';
$already_crawled = [];
$crawling = [];


function follow_links($url){
  global $already_crawled;
  global $crawling;

  $doc = new DOMDocument();
  $doc->loadHTML(file_get_contents($url));

  $linklist = $doc->getElementsByTagName('a');

  foreach ($linklist as $link) {
    $l = $link->getAttribute("href");
    $full_link = 'https://example.com'.$l;

    if (!in_array($full_link, $already_crawled)) {
      $already_crawled[] = $full_link;
      $crawling[] = $full_link;
      echo $full_link.PHP_EOL;
      // Insert data in the DB
    }
  }

  array_shift($crawling);
  foreach ($crawling as $link) {
    follow_links($link);
  }
}

follow_links($homepage);
EN

回答 1

Stack Overflow用户

发布于 2018-11-20 20:26:51

我建议将服务类、命令和可能的工作组合起来,然后从工人过程运行它们。

您的服务将是一个包含爬行页面的所有逻辑的类。然后,爬虫服务将由一个手工命令、一个排队作业或两者的组合来使用。

您是对的,您不希望直接从内置的Laravel调度程序中运行爬虫(因为它可能会运行很长时间并阻止其他预定任务的运行)。然而,一个选择是使用您的Laravel计划来运行一个任务,它检查需要重新爬行的urls,并将排队的作业分派给您的工作进程,这在Laravel中非常容易实现。

每个新发现的url都可以看作一个单独的任务,并单独排队进行爬行,而不是在应用程序联机时“持续”运行进程。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53399629

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档