爬虫项

优质
小牛编辑
140浏览
2023-12-01

爬虫项是什么呢?比如采集文章列表、文章详情页,他们都是不同的采集项。

定义示例:

继承Yurun\Crawler\Module\Crawler\Contract\BaseCrawlerItem类。

<?php
namespace Yurun\CrawlerApp\Module\YurunBlog\Article;

use Imi\Bean\Annotation\Bean;
use Yurun\Crawler\Module\Crawler\Annotation\Parser;
use Yurun\Crawler\Module\Crawler\Annotation\Processor;
use Yurun\Crawler\Module\Crawler\Annotation\Downloader;
use Yurun\Crawler\Module\Crawler\Annotation\CrawlerItem;
use Yurun\Crawler\Module\Crawler\Contract\BaseCrawlerItem;
use Yurun\Crawler\Module\Processor\Annotation\ModelStorage;

/**
 * 文章内容采集
 * @Bean("ArticleCrawlerItem")
 * @CrawlerItem("YurunBlogCrawler")
 * @Downloader(limit=3)
 * @Parser(\Yurun\CrawlerApp\Module\YurunBlog\Article\Model\ArticleModel::class)
 * @Processor({"ArticleProcessor", "ModelStorageProcessor"})
 * @ModelStorage(model=\Yurun\CrawlerApp\Module\YurunBlog\Model\Article::class, uniqueFields={"title"})
 */
class ArticleCrawlerItem extends BaseCrawlerItem
{
    
}

前置和后置方法:

每一步动作前后置方法,你都可以介入。覆盖方法即可。

支持覆盖的方法如下:

/**
 * 下载内容前置操作
 *
 * @param \Yurun\Crawler\Module\Downloader\Model\DownloadParams $params
 * @return \Psr\Http\Message\ResponseInterface|null
 */
protected function beforeDownload(DownloadParams $params): ?ResponseInterface
{
    return null;
}

/**
 * 下载内容后置操作
 *
 * @param \Yurun\Crawler\Module\Downloader\Model\DownloadParams $params
 * @return \Psr\Http\Message\ResponseInterface
 */
protected function afterDownload(DownloadParams $params, ResponseInterface $response): ResponseInterface
{
    return $response;
}

/**
 * 解析前置操作
 *
 * @param \Yurun\Crawler\Module\Parser\Model\ParserParams $params
 * @param string $modelClass
 * @return \Yurun\Crawler\Module\DataModel\Contract\IDataModel|null
 */
protected function beforeParse(ParserParams $params, string $modelClass): ?IDataModel
{
    return null;
}

/**
 * 解析后置操作
 *
 * @param \Yurun\Crawler\Module\Parser\Model\ParserParams $params
 * @param string $modelClass
 * @param \Yurun\Crawler\Module\DataModel\Contract\IDataModel $data
 * @return \Yurun\Crawler\Module\DataModel\Contract\IDataModel|null
 */
protected function afterParse(ParserParams $params, string $modelClass, IDataModel $data): IDataModel
{
    return $data;
}

/**
 * 处理前置操作
 *
 * @param \Yurun\Crawler\Module\Processor\Model\ProcessorParams $params
 * @return void
 */
protected function beforeProcess(ProcessorParams $params)
{

}

/**
 * 处理后置操作
 *
 * @param \Yurun\Crawler\Module\Processor\Model\ProcessorParams $params
 * @return void
 */
protected function afterProcess(ProcessorParams $params)
{

}

注解

@CrawlerItem

类名:\Yurun\Crawler\Module\Crawler\Annotation\CrawlerItem

爬虫项定义,必须

@CrawlerItem("YurunBlogCrawler")

参数:

名称描述默认值
class爬虫对象类名

@Downloader

类名:\Yurun\Crawler\Module\Crawler\Annotation\Downloader

声明下载器,非必须,缺省则取爬虫对象上的

参数:

名称描述默认值
class下载器类名Yurun\Crawler\Module\Downloader\Handler\YurunHttpDownloader
queue下载器队列名defaultDownloader
limit限流数量,小于等于0时不限制null
limitUnit限流单位时间,默认为:秒(second);支持:microsecond、millisecond、second、minute、hour、day、week、month、yearlimitUnit
limitWait限流等待时间,单位:秒60
timeout单个工作超时时间,单位:秒60

@Parser

类名:\Yurun\Crawler\Module\Crawler\Annotation\Parser

声明解析器,必须

参数:

名称描述默认值
model模型类名
queue解析器队列名defaultParser
timeout单个工作超时时间,单位:秒60

@Processor

类名:\Yurun\Crawler\Module\Crawler\Annotation\Processor

声明处理器,必须

参数:

名称描述默认值
class处理器类名或类名数组
queue处理器队列名defaultProcessor
timeout单个工作超时时间,单位:秒60