精易论坛

标题: PHP求助 [打印本页]

作者: 湘伦    时间: 2024-5-10 13:44
标题: PHP求助

<?php

$url = 'https://movie.douban.com/subject/36069854'; // 替换为你想要获取源码的网页URL
// 使用file_get_contents获取网页源码
$html = file_get_contents($url);

// 输出网页源码
//echo htmlspecialchars($html); // 使用htmlspecialchars是为了避免输出中的HTML标签被浏览器解析

// 创建一个 DOMDocument 对象
$dom = new DOMDocument();
// 加载 HTML 字符串
@$dom->loadHTML('<?xml encoding="UTF-8">' . $html); // 注意:这里使用 home.php?mod=space&uid=70631 来抑制可能的警告
// 创建一个 DOMXPath 对象
$xpath = new DOMXPath($dom);

// 使用 XPath cha询来选择 id 为 info 的元素
$infoNode = $xpath->query('//*[@id="info"]')->item(0);
echo $string = $infoNode->nodeValue; // 输出:这是信息内容



这个PHP代码我在win下运行结果是


放在linux服务器里面运行 换行都没了


求助怎么让linux里面运行结果也带换行


补充内容 (2024-5-10 13:59):
要查看源码才能看到换行 直接运行是没有的 因为后面我还要用换行来做分割处理

补充内容 (2024-5-10 14:37):
自己解决了
$dom->loadHTML($html, LIBXML_HTML_NOIMPLIED);
这样可以在加载HTML内容时保留原始格式,包括换行符。
作者: emodiyu    时间: 2024-5-10 13:54
在需要换行的地方使用 \n

echo $string = $infoNode->nodeValue . "\n"; // 使用 \n 作为换行符
作者: qq73s5456    时间: 2024-5-10 13:55
把换行符给他替换下呢, \r\n  ?
作者: 湘伦    时间: 2024-5-10 13:58
emodiyu 发表于 2024-5-10 13:54
在需要换行的地方使用 \n

echo $string = $infoNode->nodeValue . "\n"; // 使用 \n 作为换行符 ...

是每一行的换行都没了 不是最后的换行
作者: 湘伦    时间: 2024-5-10 13:58
qq73s5456 发表于 2024-5-10 13:55
把换行符给他替换下呢, \r\n  ?

之前问过gpt也是这样解答的 试过了没效果
作者: emodiyu    时间: 2024-5-10 14:00
湘伦 发表于 2024-5-10 13:58
是每一行的换行都没了 不是最后的换行

使用 nl2br() 函数将换行符转换为 HTML 的 <br> 标签
作者: qq73s5456    时间: 2024-5-10 14:06
湘伦 发表于 2024-5-10 13:58
之前问过gpt也是这样解答的 试过了没效果

把原始网址的 网页源文件数据  和 你爬取处理后的 数据 进行对比 看看 就能找到问题吧
作者: 湘伦    时间: 2024-5-10 14:06
emodiyu 发表于 2024-5-10 14:00
使用 nl2br() 函数将换行符转换为 HTML 的  标签

// 使用 XPath cha询来选择 id 为 info 的元素
$infoNode = $xpath->query('//*[@id="info"]')->item(0);
echo $string = $infoNode->nodeValue; // 输出:这是信息内容

这个变量里面就不带换行 并不是前端不显示 而且信息提取出来时候就没了
作者: 湘伦    时间: 2024-5-10 14:07
qq73s5456 发表于 2024-5-10 14:06
把原始网址的 网页源文件数据  和 你爬取处理后的 数据 进行对比 看看 就能找到问题吧 ...

一样的代码 在win里面就可以 能不能帮忙看下
作者: CigaretteWine    时间: 2024-5-10 14:19
正常来说 是没有区别的,无论是windows 还Linux 返回的信息绝对是一致的。无非是换行符不一样而已 ,如果是php 根据换行符分割  用内置常量 PHP_EOL
作者: 湘伦    时间: 2024-5-10 14:30
weidongjun 发表于 2024-5-10 14:19
正常来说 是没有区别的,无论是windows 还Linux 返回的信息绝对是一致的。无非是换行符不一样而已 ,如果是 ...

你可以试一下 确实不一样
作者: qq73s5456    时间: 2024-5-10 14:33
湘伦 发表于 2024-5-10 14:07
一样的代码 在win里面就可以 能不能帮忙看下

看了下爬取的地址, 源代码中 是 <br/> 标签, 还是对比下 两个输出的代码看

QQ截图20240510142935.bmp (1.05 MB, 下载次数: 0)

QQ截图20240510142935.bmp

作者: 湘伦    时间: 2024-5-10 14:36
直接解决了
$dom->loadHTML($html, LIBXML_HTML_NOIMPLIED);
这样可以在加载HTML内容时保留原始格式,包括换行符。
作者: CigaretteWine    时间: 2024-5-10 14:45
湘伦 发表于 2024-5-10 14:36
直接解决了
$dom->loadHTML($html, LIBXML_HTML_NOIMPLIED);
这样可以在加载HTML内容时保留原始格式,包括 ...

爬虫有现成的库 composer 安装下就行了,这样多麻烦
作者: 湘伦    时间: 2024-5-10 14:47
weidongjun 发表于 2024-5-10 14:45
爬虫有现成的库 composer 安装下就行了,这样多麻烦

没了解过 懒得学了 用dom已经搞定了




欢迎光临 精易论坛 (https://125.confly.eu.org/) Powered by Discuz! X3.4