PHP & CURL 抓取

PHP & CURL scraping

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

$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;

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

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

所以这里你要找出问题所在

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

还有一个,尝试使用var_dump查看输出(仅用于调试目的)。 curl_exec returns bool 可能为假或空。如果您打印 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会在运行时为你打印。