robertbyrnes / phpcrawler
A PHP CLI links crawler using FIFO Queue data structure and Producer/Consumer model.
Requires
- php: >=7.4
- amphp/amp: ^2.5
- amphp/parallel: ^1.4
Requires (Dev)
- phpunit/phpunit: 9.5.2
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 的计数。当队列为空时退出程序。