2020-06-11 18:09:27
围观(3542)
又遇到了需要初始数据的需求...
所以就有了本文, 使用 PHP 采集运营的商户类目.
首先是要找到源头, 想想哪里有商户类目可以拿到商户经营类目, 所以博主选择了微信公众号的运营文档作为采集目标.
微信公众号的商户运营类目: https://kf.qq.com/faq/140225MveaUz1501077rEfqI.html
有了目标, 就要选择技术栈进行采集数据了. 博主用 PHP 框架 Laravel 和 QueryList 搭配进行采集.
Laravel 的安装就不多说了, 不会安装可以看官方文档.
QueryList 的安装很简单, 可以直接看官网: www.querylist.cc
使用 Composer 也就一句命令:
composer require jaeger/querylist
安装好之后, 照着文档这个表格采集就行了: www.querylist.cc/docs/guide/v4/table
因为目标页面就是用了表格.
放上博主写好的代码(因为是采集数据而已 并不是真的用这个继续写项目 所以代码可继续优化):
public function start() { $url = 'https://kf.qq.com/faq/140225MveaUz1501077rEfqI.html'; $html = file_get_contents($url); $table = QueryList::html($html)->find('table'); // 如果需要表头 从 0 开始 $table_rows = $table->find('tr:gt(1)')->map(function($row) { return $row->find('td')->texts()->all(); }); $rows_content = $table_rows->all(); //dd($rows_content); $lst_content = []; $i = 0; $now_parent_id = 0; foreach ($rows_content as $row_content) { if (count($row_content) <= 2) continue; $i++; if (count($row_content) == 7) { // 当前是顶级分类和二级分类 $now_parent_id = $i; $lst_content[$i] = [ 'id' => $i, 'name' => $row_content[0], 'parent_id' => 0, 'level' => 1, 'describe' => str_replace("\n", '', $row_content[3]), ]; // 二级分类 $i++; $lst_content[$i] = [ 'id' => $i, 'name' => $row_content[1], 'parent_id' => $now_parent_id, 'level' => 2, 'describe' => $row_content[2], ]; } else { // 当前只有二级分类 $lst_content[$i] = [ 'id' => $i, 'name' => $row_content[0], 'parent_id' => $now_parent_id, 'level' => 2, 'describe' => $row_content[1], ]; } } return response()->json($lst_content); }
将上面这些代码放到控制器并设置路由, 访问后可以获取 JSON 格式的数据, 已经爬好了的数据是这样的:
主要就是字段是这样的:
id name parent_id level describe
上面给的 JSON 数据已经是含有关系了, 所以拿着这些数据可以直接存到数据库.
存入到数据库的效果:
然后就可以拿着这些数据去开发一些选择类目的接口了..
SQL 格式的数据下载(博主导出的):https://pan.baidu.com/s/1del_w5s6jKfv7PeEEQ2nzg
提取码:tlel
博主是用 MySQL-Front 这个软件导出的, 如果用了其他的软件或者程序进行导入, 例如 PHPMyAdmin 可能会不兼容无法导入.
无法导入可以下载安装 MySQL-Front 导入, 或者直接运行上面博主提供的代码即可.
本文地址 : bubaijun.com/page.php?id=188
版权声明 : 未经允许禁止转载!
上一篇文章: 博客文章被采集(爬取)搬运
下一篇文章: ThinkPHP6全局事务(中间件及订阅事件)