【问题标题】:file_get_contents not returning entire webpagefile_get_contents 不返回整个网页
【发布时间】:2016-03-22 18:11:26
【问题描述】:

我一直在尝试使用 file_get_contents 检索网页 (http://3sk.tv) 的内容。不幸的是,生成的输出缺少许多元素(图像、格式、样式等...),基本上看起来不像我要检索的原始页面。

这在我尝试使用相同方法检索的任何其他 URL 之前从未发生过,但由于某种原因,这个特定 URL (http://3sk.tv) 拒绝正常工作。

我使用的代码是:

<?php
$homepage = file_get_contents('http://3sk.tv');
echo $homepage;
?>

我错过了什么吗?所有有关如何使其正常工作的建议将不胜感激。感谢大家的时间和考虑。

【问题讨论】:

  • 我建议使用cURLsee here for details。也请注意,刮擦并不总是合法的......
  • 尝试使用您提到的 curl 实现,不幸的是根本没有任何变化。感谢您的意见。
  • 顺便说一句,这是一篇大学研究论文,不是为了抓取目的

标签: php file-get-contents


【解决方案1】:

这是正常行为,因为您只是抓取文件,而不是相关的图像、样式表等......

【讨论】:

  • 您绝对正确,它不会重新加载图像或 CSS...关于如何检索整个内容的任何想法/建议??
【解决方案2】:

我有一个快速的解决方法来修复相对路径

http://www.w3schools.com/tags/tag_base.asp

只需在您的代码中添加&lt;base&gt; 标记即可。

<?php
$homepage = file_get_contents('http://3sk.tv');
echo str_replace(
   '<head>', 
   '<head><base href="http://3sk.tv" target="_blank">',
    $homepage
);
?>

应该有帮助。

【讨论】:

  • 嗨@jQuery00,尝试使用您建议的方法,最终输出有一些改进(出现了正文中的图像),但仍然缺少许多 CSS 和样式元素。任何建议将不胜感激。谢谢
  • 嗨@jameslanvin 对你来说是个好消息。我发现了一个问题并更新了问题。现在像魅力一样工作!
  • 刚刚又测试了一遍,先生,是 file_get_contents 的窃听者!惊人的。工作几乎完美!谢谢
【解决方案3】:

这是意料之中的。如果您查看源代码,您会注意到很多地方没有完整的 URL (ex lib/dropdown/dropdown.css)。这告诉浏览器假设http://3sk.tv/lib/dropdown/dropdown.css。但是,在您的网站上,它将是 YOURURL.COM/lib/dropdown/dropdown.css,它不存在。大部分内容都是如此。

因此,您不能只打印另一个网站的源代码并期望它能够正常工作。它必须是相同的 URL。

嵌入另一个网站的最佳方式通常是使用iframesome alternative

【讨论】:

    【解决方案4】:

    网页并非完全在服务器端生成,而是在 HTML 部分加载后严重依赖 JavaScript。如果您正在寻找呈现在浏览器中的页面,您可能需要一个无头浏览器 - 参见例如这个绑定到 PhantomJS:http://jonnnnyw.github.io/php-phantomjs/

    【讨论】:

    • (至于“这从未发生过”——振作起来;到目前为止你很幸运,这种情况几乎一直都在发生)
    • “振作起来”
    猜你喜欢
    • 1970-01-01
    • 2012-12-16
    • 2021-06-02
    • 2021-11-24
    • 2016-05-03
    • 2023-03-19
    • 2019-03-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多