easyswoole/spider
Composer 安装命令:
composer require easyswoole/spider
包简介
An efficient swoole framework
README 文档
README
EasySwoole-Spider 可以方便用户快速搭建分布式多协程爬虫。
快速使用
以百度搜索为例,根据搜索关键词找出爬出每个关键词检索结果前几页的特定数据
纯属教学目的,如有冒犯贵公司还请及时通知,会及时调整
Product
<?php namespace App\Spider; use EasySwoole\HttpClient\HttpClient; use EasySwoole\Spider\Config\ProductConfig; use EasySwoole\Spider\Hole\ProductAbstract; use EasySwoole\Spider\ProductResult; use QL\QueryList; use EasySwoole\FastCache\Cache; class ProductTest extends ProductAbstract { public function product():ProductResult { // TODO: Implement product() method. // 请求地址数据 $httpClient = new HttpClient($this->productConfig->getUrl()); $httpClient->setHeader('User-Agent', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.116 Safari/537.36'); $body = $httpClient->get()->getBody(); // 先将每个搜索结果的a标签内容拿到 $rules = [ 'search_result' => ['.c-container .t', 'text', 'a'] ]; $searchResult = QueryList::rules($rules)->html($body)->query()->getData(); $data = []; foreach ($searchResult as $result) { $item = [ 'href' => QueryList::html($result['search_result'])->find('a')->attr('href'), 'text' => QueryList::html($result['search_result'])->find('a')->text() ]; $data[] = $item; } $productJobOtherInfo = $this->productConfig->getOtherInfo(); // 下一批任务 $productJobConfigs = []; if ($productJobOtherInfo['page'] === 1) { for($i=1;$i<5;$i++) { $pn = $i*10; $productJobConfig = [ 'url' => "https://www.baidu.com/s?wd={$productJobOtherInfo['word']}&pn={$pn}", 'otherInfo' => [ 'word' => $productJobOtherInfo['word'], 'page' => $i+1 ] ]; $productJobConfigs[] = $productJobConfig; } $word = Cache::getInstance()->deQueue(self::SEARCH_WORDS); if (!empty($word)) { $productJobConfigs[] = [ 'url' => "https://www.baidu.com/s?wd={$word}&pn=0", 'otherInfo' => [ 'word' => $word, 'page' => 1 ] ]; } } $result = new ProductResult(); $result->setProductJobConfigs($productJobConfigs)->setConsumeData($data); return $result; } }
Consume
我这里直接存文件了,可按照需求自己定制
<?php namespace App\Spider; use EasySwoole\Spider\ConsumeJob; use EasySwoole\Spider\Hole\ConsumeAbstract; class ConsumeTest extends ConsumeAbstract { public function consume() { // TODO: Implement consume() method. $data = $this->getJobData(); $items = ''; foreach ($data as $item) { $items .= implode("\t", $item)."\n"; } file_put_contents('baidu.txt', $items, FILE_APPEND); } }
注册爬虫组件
public static function mainServerCreate(EventRegister $register) { $spiderConfig = [ 'product' => ProductTest::class, // 必须 'consume' => ConsumeTest::class, // 必须 'queueType' => SpiderConfig::QUEUE_TYPE_FAST_CACHE, 'queue' => '自定义队列,如使用组件自带则不需要', 'queueConfig' => '自定义队列配置,目前只有SpiderConfig::QUEUE_TYPE_REDIS需要', 'maxCurrency' => 128 // 最大协程并发数 ]; SpiderServer::getInstance() ->setSpiderConfig($spiderConfig) ->attachProcess(ServerManager::getInstance()->getSwooleServer()); }
投递任务
$words = [ 'php', 'java', 'go' ]; foreach ($words as $word) { Cache::getInstance()->enQueue('SEARCH_WORDS', $word); } $wd = Cache::getInstance()->deQueue('SEARCH_WORDS'); SpiderClient::getInstance()->addJob( 'https://www.baidu.com/s?wd=php&pn=0', [ 'page' => 1, 'word' => $wd ] );
easyswoole/spider 适用场景与选型建议
easyswoole/spider 是一款 基于 PHP 开发的 Composer 扩展包,目前已累计 961 次下载、GitHub Stars 达 52, 最近一次更新时间为 2020 年 02 月 27 日, 在 PHP 生态内属于活跃度较高的组件。
它主要适用于以下技术方向: 「framework」 「spider」 「swoole」 「easyswoole」 等业务场景。在实际项目中,围绕这些方向常见需要落地的问题包括:接口对接、性能调优、并发安全、与既有框架(Laravel / ThinkPHP / Yii / Webman 等)的兼容适配,以及生产环境的日志埋点与稳定性保障。
我们在过去多个企业项目中使用过 easyswoole/spider 或与其功能相近的方案,如果你在选型或落地过程中遇到问题,例如 版本兼容、二次改造、私有化封装、与内部系统对接、生产 BUG 排查,欢迎联系我们协助评估。
基于 easyswoole/spider 在你已有业务上做功能扩展、字段裁剪、UI 适配、与内部账号 / 权限 / 日志系统的深度对接。
线上偶发问题、内存泄漏、慢查询、并发异常等排查修复;针对高流量场景做缓存、队列、索引层面的调优。
承接完整的项目从需求 → 设计 → 开发 → 上线 → 长期运维;也可按月提供技术保姆服务。
与 easyswoole/spider 相关的其它包
同方向 / 同关键字的高下载量 PHP Composer 包推荐,方便对比选型:
PHP Framework HLEB2 is the foundation of the web application. Provides ease of development and application performance.
A new generation of multi-process async event-driven spider engine based on Workerman
annotations-scan-plugin
X-Robots-Tag HTTP header parser class
SForum
parser/handler for Robots Exclusion Protocol (robots.txt and more)
统计信息
- 总下载量: 961
- 月度下载量: 0
- 日度下载量: 0
- 收藏数: 53
- 点击次数: 4
- 依赖项目数: 0
- 推荐数: 0
其他信息
- 授权协议: Apache-2.0
- 更新时间: 2020-02-27