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);
代码说明
- 先初始化空的结果数组,避免未定义问题
- 遍历页面中所有的
<table>元素 - 对每个表格,再遍历其下的每一行
<tr> - 针对每一行单独提取
<th>和<td>的文本,确保每一组键值对都被捕获 - 增加非空判断,过滤掉没有
<th>的无效行(比如表格标题行或空行)
修改后,输出结果会包含目标页面表格里所有的<th>与<td>对应的数据。
内容的提问来源于stack exchange,提问作者shuvo
相关产品推荐
相关产品推荐

