学习分享
以产品的思维来做项目或者有产品思维
3月10周会
运维
工时登记
本文档使用 MrDoc 发布
-
+
首页
以产品的思维来做项目或者有产品思维
## 爬取一个电影网站详情页 > 匹配 标题、描述、缩略图、详情、下载链接 [示例](http://mrdoc.tool115.com/media/202303/2023-03-09_213206.png "示例") 1. 实现一 ```php public function parseFileds($document) { // 匹配标题 // 匹配缩略图 // 匹配下载地址 // 匹配描述 return [ 'title', 'thumb', 'detail', 'download_url', ]; } ``` 2. 实现二 ```php public function parseTitle($document, $rule) { return $title; } public function parseThumb($document, $rule) { return $thumb; } public function parseDetail($document, $rule) { return $detail; } ``` 3. 实现三 ```php // 处理器接口 interface InterfaceProcessor { public function run($document, $rule); } // 处理器抽象类 abstract class AbstractProcessor { // 公用属性 protected $filedKey; // 其它公用方法 } // 处理器链 class ProcessorChain { protected $processors = []; public function addProcessor(AbstractProcessor $processor) { $this->processors[] = $processor; } public function runProcessor($document, $rule) { $data = []; foreach ($this->processors as $processor) { $data = array_merge($data, $processor->run($document, $rule)); } return $data; } } // 处理标题 class ProcessorTitle extends AbstractProcessor implements InterfaceProcessor { protected $filedKey = 'title'; public function run($document, $rule) { return [ $this->filedKey => 'xxxx', ]; } } // 处理缩略图 class ProcessorThumb extends AbstractProcessor implements InterfaceProcessor { protected $filedKey = 'thumb'; public function run($document, $rule) { return [ $this->filedKey => 'xxxx', ]; } } $processorChain = new ProcessorChain(); $processorChain->addProcessor(new ProcessorTitle()); $processorChain->addProcessor(new ProcessorThumb()); $data = $processorChain->runProcessor($document, $rule); //... ``` ## 序列化新闻列表 [示例](http://mrdoc.tool115.com/media/202303/7361678369326_pic_hd_1678369698.jpg "示例") > 三图、广告、大图、视频、大鱼号 1. 实现一 ```php // 获取序列化后的列表 public function lists() { $data = []; foreach ($rows as $row) { switch ($row['type']) { case 'article': $data[] = $this->parseArticle($row); break; case 'video': $data[] = $this->parseVideo($row); break; case 'ad': $data[] = $this->parseAd($row); break; } } return $data; } public function parseArticle($content) { return $article; } public function parseVideo($content) { return $video; } public function parseAd($content) { return $ad; } ``` 2. 实现二 ```php // 处理器接口 interface InterfaceProcessor { public function run($row); } // 处理器抽象类 abstract class AbstractProcessor { // 公用属性 // 其它公用方法 } // 处理器链 class ProcessorChain { protected $processors = []; public function addProcessor(AbstractProcessor $processor) { $this->processors[] = $processor; } public function runProcessor($row) { foreach ($this->processors as $processor) { $row = $processor->run($row); } return $row; } } class ProcessorArticle extends AbstractProcessor implements InterfaceProcessor { public function run($row) { } } class ProcessorVideo extends AbstractProcessor implements InterfaceProcessor { public function run($row) { } } class ProcessorAd extends AbstractProcessor implements InterfaceProcessor { public function run($row) { } } //... 更多类型数据 例如:图片、图集 $processorChain = new ProcessorChain(); $processorChain->addProcessor(new ProcessorArticle()); $processorChain->addProcessor(new ProcessorVideo()); $processorChain->addProcessor(new ProcessorAd()); $data = []; foreach ($rows as $row) { $data[] = $processorChain->runProcessor($row); } ``` - 多记录日志,尤其是与三方对接的场景,记录请求、响应 - 适当的留`后门` 便于排查问题 - 多写幂等的业务代码 - 批量消息推送
admin
2023年3月9日 23:01
转发文档
收藏文档
上一篇
下一篇
手机扫码
复制链接
手机扫一扫转发分享
复制链接
Markdown文件
分享
链接
类型
密码
更新密码