PHP爬虫textContent丢失<br>换行,如何按换行分割爬取结果?
解决PHP爬虫中
标签换行丢失的问题
标签换行丢失的问题
你的问题出在DOMDocument::textContent会直接忽略所有HTML标签,包括<br>,导致原本的换行结构丢失。以下两种方案可以解决这个问题:
方案一:先替换
为换行符再提取文本
适合HTML中<br>格式比较统一的场景,操作简单直接:
$ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $eng_SCCW_array["Here is my website"]); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); $html = curl_exec($ch); // 替换所有形式的<br>标签为换行符\n $html = str_replace(['<br>', '<br/>', '<br />'], "\n", $html); $doc = new DOMDocument(); @ $doc->loadHTML($html); $elements_content = $doc->textContent; // 网页输出时用nl2br把\n转回<br>,方便查看 echo nl2br($elements_content) . "<br><br>"; // 后续数据分割直接用换行符拆分 $split_data = explode("\n", trim($elements_content));
方案二:用DOMXPath遍历节点,手动处理
适合复杂HTML结构,能精准识别所有<br>节点,可靠性更高:
$ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $eng_SCCW_array["Here is my website"]); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); $html = curl_exec($ch); $doc = new DOMDocument(); @ $doc->loadHTML($html); $xpath = new DOMXPath($doc); // 查询所有文本节点和br节点 $nodes = $xpath->query('//text() | //br'); $elements_content = ''; foreach ($nodes as $node) { if ($node instanceof DOMText) { // 添加文本内容 $elements_content .= $node->nodeValue; } elseif ($node instanceof DOMElement && $node->tagName === 'br') { // 遇到br节点就添加换行符 $elements_content .= "\n"; } } // 网页输出转义换行 echo nl2br($elements_content) . "<br><br>"; // 数据分割处理(过滤空行) $split_data = array_filter(explode("\n", $elements_content), function($item) { return trim($item) !== ''; });
内容的提问来源于stack exchange,提问作者Lo Dennis
相关产品推荐
相关产品推荐

