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
相关产品推荐
相关产品推荐

