Behrendt/web-scraper

此包可用于从网站抓取元素。

v1.1.0 2020-04-25 06:05 UTC

This package is auto-updated.

Last update: 2024-09-15 18:59:03 UTC


README

Packagist Version PHP from Packagist License

此包可用于从网站抓取元素。它封装了出色的 Spatie Crawler(因为我不想重新发明轮子,只构建另一个爬虫)。

爬虫预先配置为仅从给定的起始点抓取内部URL。

安装

可以使用 Composer 安装此包

composer require danielbehrendt/web-scraper

客户端选项

可以通过传递给页面检查器的构造函数来设置爬虫的客户端选项

$webScraper = new WebScraper([
    'allow_redirects' => true
]);

Spatie Crawler 在底层使用 Guzzle,因此可以传递所有 请求选项

爬虫选项

可以通过选项参数设置以下选项(来自 Spatie Crawler

$results = $webScraper->getResults(
    $url,
    [
        'userAgent' => 'my-agent',
        'concurrency' => 1,
        'maximumCrawlCount' => 5,
        'maximumDepth' => 5,
        'maximumResponseSize' => 1024 * 1024 * 3,
        'delayBetweenRequests' => 150,
        'parseableMimeTypes' => [
            'text/html', 'text/plain',
        ],
    ]
);

使用方法

可以通过这种方式实例化网络爬虫

use DanielBehrendt\WebScraper\WebScraper;

$webScraper = new WebScraper();

获取结果

$url 必须是绝对路径,以方案开头。

$results = $webScraper->getResults($url);

getResults 方法返回一个 Laravel Collection,因此支持所有 可用方法

爬虫器

可以通过 setScraper 方法设置爬虫实例。

$webScraper->setScraper(new MarkupScraper());

此包包含一些 Scrapers

  • HeaderScraper:返回每个被爬取页面的头部信息和状态码(默认爬虫器)
  • MarkupScraper:抓取每个被爬取页面的部分标记(不会返回头部信息和状态码)
  • UnencryptedEmailScraper 抓取每个被爬取页面标记中的未加密电子邮件(不会返回头部信息和状态码)

完整示例

<?php

use DanielBehrendt\WebScraper\WebScraper;
use DanielBehrendt\WebScraper\Scrapers\MarkupScraper;

$webScraper = new WebScraper();

$results = $webScraper
    ->setScraper(new MarkupScraper())
    ->getResults('https://httpbin.org/html');

添加您自己的爬虫

您可以定义自己的爬虫并通过 setScraper 方法设置它。传递的对象必须扩展抽象类 \DanielBehrendt\WebScraper\Scraper\BaseScraper,并且必须有一个 getElementSelectors 方法。

示例

<?php

use DanielBehrendt\WebScraper\Scrapers\BaseScraper;

class CustomScraper extends BaseScraper
{
    /**
     * return array
     */
    public function getElementSelectors(): array
    {
        return [
            'h1' => [
                'filter' => '//h1/text()',
            ],
            'h2' => [
                'filter' => '//h2/text()',
            ],
            'h3' => [
                'filter' => '//h3/text()',
            ],
        ];
    }
}

命令行界面(CLI)

此包还包含一些 CLI 命令

  • ./console web-scraper:header
  • ./console web-scraper:markup
  • ./console web-scraper:unencrypted-email

每个命令对应于上述提到的 Scrapers 之一。

变更日志

请参阅 CHANGELOG 了解最近更改的信息。

许可证

MIT 许可证(MIT)。请参阅 许可证文件 了解更多信息。