You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用Goutte将所有爬取的帖子数据存入数组?

批量抓取帖子并存入数组的解决方案

你的代码目前只提取了单条帖子数据,是因为直接对节点集合调用text()只会返回第一个匹配节点的内容。要实现批量抓取,需要遍历所有帖子节点,逐个提取字段后存入数组,具体修改如下:

$httpBrowser = new HttpBrowser();
$request = $httpBrowser->request('GET', $url);
// 获取页面中所有帖子的容器节点集合
$postNodes = $request->filter('.works');

$postsArr = [];

// 遍历每个帖子节点,提取数据并批量存入数组
$postNodes->each(function ($node) use (&$postsArr) {
    // 从当前帖子节点内提取字段,添加存在性判断避免报错
    $postTitle = $node->filter('.works__post')->exists() ? $node->filter('.works__post')->text() : '';
    $content = $node->filter('.works__content')->exists() ? $node->filter('.works__content')->text() : '';
    $date = $node->filter('.works__header-details--date')->exists() ? $node->filter('.works__header-details--date')->text() : '';
    
    // 将单条帖子数据加入总数组
    $postsArr[] = [
        'post_title' => $postTitle,
        'content' => $content,
        'date' => $date
    ];
});

// 最终$postsArr即为所有帖子的批量数据

关键逻辑说明

  • 获取节点集合:$request->filter('.works')会返回页面中所有匹配.works的节点(假设每个.works对应一个帖子容器),而不是单个节点。
  • 遍历节点:使用DomCrawler的each()方法遍历每个帖子节点,确保每个字段都从当前帖子的上下文内提取,避免混淆不同帖子的内容。
  • 异常防护:添加exists()判断,防止部分帖子缺少指定字段时抛出异常,提升爬虫的稳定性。
  • 批量存储:每次遍历将单条帖子的数组推入总数组$postsArr,最终得到所有帖子的结构化数据。

如果页面中帖子的容器选择器不是.works,请根据实际HTML结构调整最外层的筛选器,核心逻辑保持不变。

内容的提问来源于stack exchange,提问作者programs23

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.24 17:07:19