【问题标题】:PHP & CURL scrapingPHP & CURL 抓取
【发布时间】:2019-02-25 00:23:39
【问题描述】:

我在 Google Chrome 中运行此脚本时遇到问题,我得到一个空白页。当我使用网站的另一个链接时,它可以成功运行。我不知道发生了什么。

$curl = curl_init();

$url = "https://www.danmurphys.com.au/dm/home";
curl_setopt($curl, CURLOPT_URL, $url);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
$output = curl_exec($curl);

echo $output;

【问题讨论】:

  • Chrome 无法运行 PHP 代码
  • CURLOPT_VERBOSE、var_dump 或查看返回的源将比仅仅观察“空白”页面更有用。您可能会注意到这是一个仅使用 JavaScript 呈现的网站。

标签: php curl scrape


【解决方案1】:

有些情况会使您的结果为空。如:

  1. 卷曲错误。
  2. 没有响应正文的重定向,并且 curl 不遵循重定向。
  3. 目标主机未提供任何响应正文。

所以在这里你必须找出问题所在。

  • 对于第一种可能性,使用 curl_errorcurl_errno 确认 curl 在运行时没有出错。
  • 第二个,使用CURLOPT_FOLLOWLOCATION 选项确保 curl 遵循重定向。
  • 对于第三种可能性,我们可以使用curl_getinfo。它返回一个包含“size_download”的数组。 size_download 显示响应正文的长度。如果它为零,这就是您在打印时看到空白页的原因。

另外,尝试使用var_dump 来查看输出(仅用于调试目的)。 curl_exec 有可能返回 bool false 或 null。如果你打印 bool false 或 null 它将显示一个空白。

这是使用所有这些的示例。

<?php

$curl = curl_init();
$url = "https://www.danmurphys.com.au/dm/home";
curl_setopt($curl, CURLOPT_URL, $url);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
curl_setopt($curl, CURLOPT_FOLLOWLOCATION, true);

$output = curl_exec($curl);
$info = curl_getinfo($curl);
$err = curl_error($curl);
$ern = curl_errno($curl);

if ($ern) {
    printf("An error occurred: (%d) %s\n", $ern, $err);
    exit(1);
}
curl_close($curl);

printf("Response body size: %d\n", $info["size_download"]);

// Debug only.
// var_dump($output);

echo $output;

希望对你有帮助。

更新:

您可以使用CURLOPT_VERBOSE查看详细的请求和响应信息。 只需添加此

curl_setopt($curl, CURLOPT_VERBOSE, true);

不需要打印,curl会在运行时为你打印出来。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-11
    • 1970-01-01
    • 1970-01-01
    • 2015-02-27
    • 2015-03-30
    相关资源
    最近更新 更多