2020-06-11 18:09:27
围观(4079)
又遇到了需要初始数据的需求...
所以就有了本文, 使用 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全局事务(中间件及订阅事件)