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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.23 16:52:41