robertbyrnes/phpcrawler

A PHP CLI links crawler using FIFO Queue data structure and Producer/Consumer model.

安装: 7

依赖: 0

建议: 0

安全: 0

星星: 2

关注者: 1

分支: 1

开放问题: 0

类型:cli-application

1.1 2021-03-29 19:01 UTC

This package is auto-updated.

Last update: 2024-09-07 03:33:53 UTC


README

PHP中的队列 - 生产者 - 消费者网络爬虫的实现。使用amphp/parallel依赖关系通过多个进程或本地线程来爬取域以响应链接。

                                                    / _ \
                                                  \_\(_)/_/
                                                   _//o|\_
                                                    /  |

@author: Robert Byrnes @email: robert@globalrbdev.uk

安装

使用 'composer require robertbyrnes/phpcrawler' 安装:安装完成后,'cd' 到 vendor/robertbyrnes/phpcrawler 以找到 main.php,这是运行程序的文件。如果您遇到任何关于 '找不到类' 的错误,请确保运行 composer update 和 composer dump-autoload 命令。从终端/命令提示符运行 'php main.php',将显示帮助菜单,详细说明开始爬取所需的参数。

/*** ARGUMENTS ***/
Required arguments:
    -u url (string) e.g. http://website.org or https://...
    -n project name (string) e.g. website - this is used to create the dir to save the results to
        following crawling.
Optional arguments: 
    -s number of spiders (integer)[parallel processes] used in crawling. Default is 4.
    -v returns the version.
    -h prints this help message.

依赖

此程序需要 ^PHP7 来运行,以及用于多个进程的 amphp/parallel 库。Amphp/parallel 应该会自动通过 composer 安装。

Crawler::class

管理任务队列,并使用队列利用生产者/消费者模型在 Queue::class 和 Spider::class 之间传递工作。

  • Crawler::class 函数

  • spawn() 递归函数,实现了并行库的功能,通过调用 Spider::search() 来执行爬取。这个递归循环将一直运行,直到 Queue::class->queue 为空。当发生这种情况时,程序将退出。

  • add_job() 读取 queue.txt,使用 SaveData::class 添加链接到队列,将链接推送到 Queue::class。此函数是两个编程循环之一。

Queue::class

一个先进先出的数据结构。

  • Queue::class 函数

  • push() 将项目推送到队列的末尾。

  • shift() 从队列的头部取走一个项目。

  • pop() 从队列的末尾取走一个项目。

  • open_job() 增加未完成任务的计数。

  • task_done() 减少未完成任务的计数。

  • getCount() 获取队列中项目的总数。

SaveData::class

处理所有文件任务。

  • SaveData::class 函数

  • create_dir() 在根目录中创建项目目录。

  • create_files() 在项目目录中创建 queue.txt 和 crawled.txt。

  • file_to_array() 打开 queue.txt 或 crawled.txt,将流解析为数组。

  • array_to_file() 将队列数组或爬取数组写入 queue.txt 或 crawled.txt。

  • write_file() 使用 fwrite 打开新文件,或打开一个空文件然后重写。

  • append_to_file() 将行追加到 queue.txt 或 crawled.txt。

  • delete_file_contents() 清空文件 - 在 PHP-Crawler 中未使用。

Spider::class

从给定的 URL 提取链接。更新队列和文件。

  • Spider::class 函数

  • setup() 将从 URL 提取的域名打印给用户。创建目录和文件。从文件中填充队列和爬取数组。

  • search() 接受一个 URL 作为参数,调用 extract_links(),将结果传递给 sort_to_queue()。在爬取轮完成后,将更新的队列计数打印给用户并更新文件。

  • getDomain() 从给定的 URL 中提取域名。

  • extract_links() 使用内置的 php DomDocument::class 将从 URL 中提取的链接解析到数组中。

  • sort_to_queue() 清理链接以确保所有链接都在域内。确保唯一链接被推送到 Queue::class。

  • update() 使用 SaveData::class 将更新的链接写入 queue.txt 和 crawled.txt 文件。

  • check_queue() 检查 Spider::class 属性 $queue 的计数。当队列为空时退出程序。