PHP使用preg_match_all爬取指定网页车辆信息,无法提取HTML表格独立数据
解决PHP爬取HTML表格数据的问题
先别着急,咱们一步步来搞定这个表格数据提取的问题!首先得确认你的CURL请求已经正确拿到了目标页面的完整HTML——这是提取数据的基础,要是页面都没拿到,后面就无从谈起啦。
第一步:先确保CURL请求配置正确
先检查你的curl.php里有没有正确加载cookies.txt,同时模拟浏览器请求头避免被反爬,示例配置如下:
$ch = curl_init(); curl_setopt($ch, CURLOPT_URL, 'http://inkastudios.ml/test/?placa=D2D361'); curl_setopt($ch, CURLOPT_COOKIEFILE, 'cookies.txt'); // 加载已有的cookies curl_setopt($ch, CURLOPT_COOKIEJAR, 'cookies.txt'); // 后续请求保存cookies(可选) curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); // 把结果返回给变量而不是直接输出 curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true); // 自动跟随跳转 curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36'); // 模拟浏览器UA $response = curl_exec($ch); curl_close($ch); // 先验证是否拿到了有效页面 if(empty($response)) { die("CURL请求失败!检查cookies路径、网络连接或者网站反爬规则"); }
你可以先在这段代码后加个echo $response;,看看输出的内容里有没有你要的车辆信息表格,确认请求没问题再往下走。
第二步:用DOMDocument解析表格数据
PHP内置的DOMDocument+DOMXPath是解析HTML表格最可靠的方式(比正则表达式靠谱多了),下面是具体的提取代码:
// 忽略HTML解析时的警告(很多网站的HTML代码不规范,会抛出警告) libxml_use_internal_errors(true); $dom = new DOMDocument(); $dom->loadHTML($response); libxml_clear_errors(); // 用XPath定位目标表格,你可以根据表格的实际特征调整规则: // 比如表格有class就写//table[@class='vehicle-table'],有id就写//table[@id='car-info'],没有特征就直接用//table取第一个表格 $xpath = new DOMXPath($dom); $targetTable = $xpath->query("//table")->item(0); if(!$targetTable) { die("页面里没找到目标表格!检查XPath规则或者页面结构是否变化"); } // 遍历表格行,提取数据 $vehicleInfo = []; $rows = $targetTable->getElementsByTagName('tr'); foreach($rows as $row) { $cells = $row->getElementsByTagName('td'); $rowData = []; foreach($cells as $cell) { // 提取单元格文本,去掉多余的空格和换行 $rowData[] = trim($cell->textContent); } // 跳过空行 if(!empty($rowData)) { $vehicleInfo[] = $rowData; } } // 打印提取到的车辆数据 print_r($vehicleInfo);
一些额外提示
- 如果表格有
<thead>和<tbody>,可以把XPath改成//table/tbody/tr,只提取主体内容行 - 要是遇到合并单元格(
colspan/rowspan),需要额外写逻辑来补全缺失的数据 - 确保你的PHP环境启用了
dom和libxml扩展(绝大多数服务器默认是开启的) - 如果网站有反爬,可能需要添加更多请求头(比如
Accept-Language),或者设置请求延迟
要是还是提取不到数据,你可以把$response里的表格部分代码贴出来,我再帮你调整XPath定位规则~
内容的提问来源于stack exchange,提问作者user9073519
相关产品推荐
相关产品推荐

