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

PHP使用DOM进行web scraping时表格值匹配if语句不生效求助

问题根因

getElementsByTagName返回的是DOM节点对象集合,并非节点的文本内容数组,你直接用in_array比对字符串和DOM对象,判断永远不成立,所以不会进入if分支输出内容。

修正方案

按下面的逻辑修改代码即可正常匹配:

// 先去除搜索值的首尾空白,避免输入首尾空格导致匹配失败
$search = trim($_POST['search_state']);
$doc = file_get_html('https://prsindia.org/covid-19/cases');
$table = $doc->getElementByTagName('table'); 
$tbody = $table->getElementByTagName('tbody');
// 获取tbody下所有行节点
$rows = $tbody->getElementsByTagName('tr');

foreach ($rows as $row) {
    $columns = $row->getElementsByTagName('td');
    $tdTextList = [];
    // 提取所有td的文本内容,存入数组后再做匹配
    foreach ($columns as $td) {
        $tdTextList[] = trim($td->plaintext);
    }
    if (in_array($search, $tdTextList)) {
        echo "workinggg";
        // 匹配到后可提前终止循环,提升执行效率
        break;
    }
}

注意事项

  • 如果你用的是simple_html_dom解析库,需要用plaintext属性获取节点的文本内容,不能直接用节点对象参与字符串比对
  • 搜索值和爬取的表格值都做trim处理,可以规避页面中存在的换行、多余空格、制表符导致的匹配失败问题
  • 用foreach遍历节点集合比手动写for循环计数更稳妥,不会因为页面表格行数调整出现越界报错

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 15:39:00