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

PHP CURL无法抓取加拿大移民局网页表格内容的问题排查

加拿大移民局快速通道轮次页面表格抓取问题排查

问题描述

使用PHP CURL请求加拿大移民局快速通道轮次页面时,返回内容仅包含表格表头(#、Date、Round type等),但<table>/<tbody>内的<tr>数据行全部丢失,怀疑是CURL参数设置导致该问题。

测试代码

<?php
$url="https://www.canada.ca/en/immigration-refugees-citizenship/corporate/mandate/policies-operational-instructions-agreements/ministerial-instructions/express-entry-rounds.html";
$base = $url;
$curl = curl_init();
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, FALSE);
curl_setopt($curl, CURLOPT_HEADER, false);
curl_setopt($curl, CURLOPT_FOLLOWLOCATION, true);
curl_setopt($curl, CURLOPT_URL, $base);
curl_setopt($curl, CURLOPT_REFERER, $base);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, TRUE);
curl_setopt($curl, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.103 Safari/537.36');

$str = curl_exec($curl);
curl_close($curl);

echo $str; // 仅表格表头存在,其余表格行丢失

可能的原因分析

  • 动态内容渲染限制:该页面的表格数据行大概率是通过JavaScript动态加载生成的,而CURL仅能抓取静态HTML源码,不会执行页面中的JavaScript脚本,因此无法获取到动态渲染的表格行内容。
  • 请求头参数缺失/过时:
    • 你使用的User-Agent版本过于老旧(Chrome 51),网站可能会对低版本浏览器返回简化内容或拦截请求,建议更换为较新的浏览器UA字符串。
    • 缺少关键请求头,比如Accept-Language、Accept-Encoding(支持gzip压缩)等,这些参数会影响网站返回的内容完整性。
  • 反爬机制拦截:加拿大移民局网站可能存在反爬策略,检测到非标准浏览器请求时,会返回不完整的页面内容。需要添加Cookie支持(设置CURLOPT_COOKIEJAR和CURLOPT_COOKIEFILE),模拟浏览器的会话状态。
  • 响应编码未处理:如果网站返回的内容是gzip压缩格式,而你的CURL未设置CURLOPT_ENCODING为gzip,可能会导致内容解析错误,丢失部分数据。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.20 19:37:43