使用Simple HTML DOM Parser提取无class属性的p标签问题
解决Simple HTML DOM Parser提取无class属性段落的问题
嘿,我刚好对Simple HTML DOM Parser的选择器用法很熟,这个问题其实不难解决!下面给你两种靠谱的实现方式,你可以根据自己的需求选:
方法一:用CSS伪类直接选择(最简洁)
Simple HTML DOM支持CSS选择器语法,我们可以用p:not([class])这个选择器直接定位所有没有class属性的段落标签。代码示例如下:
// 假设你已经初始化好了Simple HTML DOM对象,比如$html = file_get_html('目标网址'); $noClassParagraphs = []; // 选择所有无class的p标签 $targetPs = $html->find('p:not([class])'); // 遍历提取内容存入数组 foreach ($targetPs as $p) { // 这里用innertext获取段落内的文本(不含标签),如果需要带p标签的内容就用outertext $noClassParagraphs[] = trim($p->innertext); }
这个选择器的逻辑很直观::not([class])会排除所有带有class属性的p元素,不管class的值是什么,只留下完全没有class属性的那些。
方法二:遍历所有p标签手动判断(兼容性更强)
如果你的Simple HTML DOM版本比较旧,对CSS伪类的支持不够完善,可以换一种思路——先获取所有p标签,再逐个检查是否存在class属性:
$noClassParagraphs = []; // 获取页面上所有的p标签 $allPs = $html->find('p'); foreach ($allPs as $p) { // 检查当前p标签是否没有class属性,或者class属性为空字符串 if (!isset($p->class) || trim($p->class) === '') { $noClassParagraphs[] = trim($p->innertext); } }
这种方法虽然多了一步遍历判断,但兼容性更好,不用担心选择器失效的问题。
两种方法都能帮你把无class的段落单独存入数组,你可以根据自己的场景来选~
内容的提问来源于stack exchange,提问作者kores59
相关产品推荐
相关产品推荐

