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

Laravel中Goutte爬取表格全部Th/Td数据异常问题求助

解决Goutte爬取表格仅返回第一组数据的问题

你的问题根源在于没有遍历表格内的每一行<tr>,而且Goutte的text()方法默认只会返回匹配到的第一个元素的文本内容。原代码直接对整个<table>提取所有<th>和<td>的文本,自然只能拿到第一组键值对。

修正后的代码

$client = new Client();
$url = 'https://schools.world-schools.com/school/munich-international-school/';

$page = $client->request('GET', $url);
$this->results = [];

// 遍历页面中所有表格
$page->filter('table')->each(function ($table) {
    // 遍历当前表格的每一行
    $table->filter('tr')->each(function ($row) {
        // 提取当前行的th和td文本
        $thText = $row->filter('th')->text();
        $tdText = $row->filter('td')->text();
        
        // 仅当th有内容时存入结果,避免无效数据
        if (!empty($thText)) {
            $this->results[$thText] = $tdText;
        }
    });
});

dd($this->results);

代码说明

  1. 先初始化空的结果数组,避免未定义问题
  2. 遍历页面中所有的<table>元素
  3. 对每个表格,再遍历其下的每一行<tr>
  4. 针对每一行单独提取<th>和<td>的文本,确保每一组键值对都被捕获
  5. 增加非空判断,过滤掉没有<th>的无效行(比如表格标题行或空行)

修改后,输出结果会包含目标页面表格里所有的<th>与<td>对应的数据。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 03:15:58