slote/蜘蛛

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

0.4.7 2021-09-27 12:58 UTC

README

💫 蜘蛛是一个易于模块集成的PHP库,用于爬取网站并抓取信息。

蜘蛛是一个用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是symfony组件,用于HTML和XML文档的DOM导航。您可以在这里找到文档。

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

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;
    }
}