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;
有些情况会使您的结果为空白。如:
- 卷曲错误。
- 没有响应主体的重定向,并且 curl 不遵循重定向。
- 目标主机没有给出任何响应正文。
所以这里你要找出问题所在
- 对于第一种可能性,使用
curl_error
和 curl_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会在运行时为你打印。
我在 运行 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;
有些情况会使您的结果为空白。如:
- 卷曲错误。
- 没有响应主体的重定向,并且 curl 不遵循重定向。
- 目标主机没有给出任何响应正文。
所以这里你要找出问题所在
- 对于第一种可能性,使用
curl_error
和curl_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会在运行时为你打印。