卷曲不适合获取网页内容,为什么?

时间:2009-05-02 04:35:34

标签: php curl screen-scraping web-scraping

我正在使用curl脚本转到链接并获取其内容以供进一步操作。以下是链接和卷曲脚本:

<?php 
$url = 'http://criminaljustice.state.ny.us/cgi/internet/nsor/fortecgi?serviceName=WebNSOR&amp;templateName=detail.htm&amp;requestingHandler=WebNSORDetailHandler&amp;ID=368343543';

//curl script to get content of given url

$ch = curl_init();

// set the target url

curl_setopt($ch, CURLOPT_URL,$url);

// request as if Firefox

curl_setopt($ch, CURLOPT_HTTPHEADER, Array("User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.15) Gecko/20080623 Firefox/2.0.0.15") ); 
curl_setopt($ch, CURLOPT_NOBODY, false);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$result= curl_exec ($ch);
curl_close ($ch);
echo $result;
?>

但网站并没有通过脚本除外,它在结果中给予用户异常,但如果我们通常将网址粘贴到浏览器中,那么打开页面就完全没问题了。

请帮助,我在这里做错了什么。

谢谢和问候

4 个答案:

答案 0 :(得分:5)

我运行了以下程序/脚本,页面已正确下载。这很可能意味着您运行脚本的服务器无法通过“criminaljustice.state.ny.us”访问服务器。这可能是因为您的服务器配置错误,或者他们的服务器明确阻止了您,这是积极的屏幕抓取的常见结果。

<?php
$url = 'http://criminaljustice.state.ny.us/cgi/internet/nsor/fortecgi?serviceName=WebNSOR&templateName=detail.htm&requestingHandler=WebNSORDetailHandler&ID=368343543';
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL,$url);
curl_setopt($ch, CURLOPT_HTTPHEADER, Array("User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.15) Gecko/20080623 Firefox/2.0.0.15") ); 
curl_setopt($ch, CURLOPT_NOBODY, false);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$result= curl_exec ($ch);
curl_close ($ch);
echo $result;

其他疑难解答提示 - 如果您对运行PHP脚本的计算机具有shell访问权限,请运行以下命令

curl -I 'http://criminaljustice.state.ny.us/cgi/internet/nsor/fortecgi?serviceName=WebNSOR&templateName=detail.htm&requestingHandler=WebNSORDetailHandler&ID=368343543'

这将输出响应标头,其中可能包含一些关于您的请求失败原因的线索。

答案 1 :(得分:2)

对于useragent我认为你想使用CURLOPT_USERAGENT常量

curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0)");

答案 2 :(得分:2)

我有同样的问题,最终成为未设置的followlocation选项。我认为curl会默认设置为true,但我猜不是!? 一旦我设置它就完全没有问题

答案 3 :(得分:1)

用户代理是否意味着在这样的数组中?我之前没见过它。

尝试使用普通字符串,即

curl_setopt($ch, CURLOPT_HTTPHEADER, 'User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.15) Gecko/20080623 Firefox/2.0.0.15');