【问题标题】:Getting HTML data from php page从 php 页面获取 HTML 数据
【发布时间】:2015-07-20 14:03:11
【问题描述】:

我有一个像 https://facebook.com/5 这样的 URL,我想获取该页面的 HTML,就像查看源代码一样。 我尝试使用file_get_contents,但这并没有返回正确的东西。 我错过了什么吗?

还有什么其他功能可以使用吗?

如果我无法获得该页面的 HTML,开发人员在对网站进行编码时做了什么特别的事情来避免这种事情?

【问题讨论】:

  • file_get_contents 出现什么错误?如果该功能未被阻止,它将返回服务器回复的任何内容。也许服务器期待一些您没有提供的特定标头、用户代理字符串或 cookie。
  • 如果在页面加载后 HTML 发生了变化,file_get_contents() 不会接受它,它只是从服务器获取响应,它不会运行它。此外,还有一些检测脚本的方法,通常只需根据已知默认值检查 UA 并返回不同或空的响应。你实际得到的东西与你期望的东西。
  • 我认为您的file-get-contents() 可能不支持 SSL。
  • @fMarki555 有时我会得到 facebook 的安全验证码 HTML,有时我会得到一些 JS 但不是实际的 HTML
  • 抓取 Facebook 内容违反了他们的服务条款。如果您想与 Facebook 上的任何内容进行交互,请使用他们的 API。

标签: php html facebook web-scraping file-get-contents


【解决方案1】:

您可能想使用 curl:http://php.net/manual/en/curl.examples.php

编辑: 这是我的一个例子:

$url = 'https://facebook.com/5';
$ssl = true;
$ch = curl_init();
$timeout = 3;
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, $timeout);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, $ssl);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
$data = curl_exec($ch);
curl_close($ch);

请注意,根据网站的 vhost 配置,网址末尾的斜线可能会有所不同。

编辑:对不起未定义的变量。我从我使用的辅助方法中复制了它。现在应该没问题了。

又一个编辑:

curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);

通过添加此选项,您将遵循您的示例中明显发生的重定向。既然你说这是一个例子,我实际上之前没有运行它。现在我做到了,而且效果很好。

【讨论】:

  • 我也尝试过 curl 但无法获得实际结果。
  • 事实上,这更像是一个评论而不是一个答案。尝试添加一些实际代码。
  • @JonStirling 不,你不能。您需要发布问题或答案,直到您有足够的代表发表评论。
  • @DonL,代码没有运行,因为第 9 行的 $ssl 未定义!
  • @DonL ,$data 变量中没有回显,你得到了什么
【解决方案2】:

离题警告
但是这个任务已经用 PHP 完成了吗?

由于这听起来像是一项网络抓取任务,我认为您会在casperjs 中获得更多用途。
有了这个,您可以精确地定位您想要从 fb 页面检索的内容,而不是抓取整个内容,我假设在撰写本文时这些内容是由多个内容请求生成并通过虚拟 DOM 呈现给您的。


请注意,我没有尝试从 facebook 检索内容,但我已经通过多种服务完成了这项工作。


祝你好运!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-03-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-16
    • 1970-01-01
    • 2016-11-13
    • 1970-01-01
    相关资源
    最近更新 更多