首页 > 解决方案 > PHP & CURL 抓取

问题描述

当我在 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;

标签: phpcurlscrape

解决方案


有一些条件会使您的结果为空。如:

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

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

  • 对于第一种可能性,使用curl_errorandcurl_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 会在运行时为您打印。


推荐阅读