mediashare/spider

Spider是一个用于抓取网站的PHP库,它允许您抓取信息并执行自动化操作。

0.4.7 2021-09-27 12:58 UTC

README

💫 Spider是一个PHP库,具有易于模块化的网站抓取功能,允许您抓取信息。

Spider是一个可模块化的PHP编写的网站爬虫。该工具允许您检索信息和在网站页面上执行代码。它可以用于SEO或安全审计目的。用户可以使用社区创建的模块或创建自己的模块(通过Web界面用PHP编写)。

什么是爬虫?

爬虫是一个索引机器人,它自动遍历网站页面。使用爬虫可以有几个兴趣点

  • 信息搜索与检索
  • 验证您的网站SEO
  • 集成测试
  • 以自动化的方式在多个页面上执行PHP代码

功能

  • 获取网站上的所有链接
  • 检查HTTP响应
  • 创建自己的模块(抓取并执行您的PHP代码)
  • 无数据库,纯PHP
  • 输出JSON文件
  • 使用内核中的默认模块进行基本SEO审计。(元数据、图片、HttpCode、链接...)

我很乐意收到您对项目的想法和贡献 😃

入门

安装

Composer使用

在项目中使用Spider库并创建自己的模块。

composer require mediashare/spider
使用
<?php
// ./index.php
require 'vendor/autoload.php';
use Mediashare\Spider\Entity\Config;
use Mediashare\Spider\Entity\Url;
use Mediashare\Spider\Spider;

// Website Config
$config = new Config();
$config->setWebspider(true); // Crawl all website
$config->setPathRequires(['/Kernel/']); // Not crawl other path
$config->setPathExceptions(['/CodeSnippet/']); // Not crawl this path
// Modules
$config->setReportsDir(__DIR__.'/reports/'); // Reports path
$config->setModulesDir(__DIR__.'/modules/'); // Modules path
$config->enableDefaultModule(true); // Enable default SEO kernel modules
$config->removeModule('FileDownload'); // Disable Module
// Prompt Console / Dump
$config->setVerbose(true); // Prompt verbose output
$config->setJson(false); // Prompt json output

// Url
$url = new Url('https://mediashare.fr');

// Run Spider
$spider = new Spider($url, $config);
$result = $spider->run();

Github

git clone https://github.com/Mediashare/Spider
cd Spider
composer install
从控制台执行代码。
bin/console spider:run https://mediashare.fr

二进制文件

curl -O https://raw.githubusercontent.com/Mediashare/Spider/master/spider.phar
chmod 755 spider.phar
从控制台执行代码。
./spider.phar spider:run https://mediashare.fr

模块

模块是由社区创建的工具,用于在抓取网站时添加功能。向爬虫添加模块允许在网站的一个或多个页面上自动化代码执行。 更多信息...

要求

  • 您的类名需要与.php文件名相同。
  • 执行模块的入口点是run()函数,因此您的模块中必须有一个run()函数。

文档

DomCrawler是用于HTML和XML文档的DOM导航的symfony组件。您可以在此处找到文档。

创建自己的模块以执行抓取的数据操作。

bin/console spider:module Href
<?php
// ./modules/Href.php
namespace Mediashare\Modules;

class Href {
    public $dom;
    public function run() { 
        $links = [];
        foreach($this->dom->filter('a') as $link) {
            if (!empty($link)) {
                $href = rtrim(ltrim($link->getAttribute('href')));
                if ($href) {
                    if (isset($links[$href])) {
                        $links[$href]['counter']++;
                    } else {
                        $links[$href]['counter'] = 1;
                    }
                }
            }
        }
        return $links;
    }
}