file_get_contents()会在www.akaar.org上返回正确的文件内容,但不会在www.ptsda.org上返回。
主要区别在于akaar.org是一个php项目,ptsda.org是html。
基本上我在php中构建一个Web爬虫。当我成功浏览至少150多个网站时,它没有抓取该特定网站。
答案 0 :(得分:2)
ptsda.org返回此403(禁止)错误:
failed to open stream: HTTP request failed! HTTP/1.1 403 ModSecurity Action
因此看起来他们已经采用Apache ModSecurity保护措施来阻止他们的内容以这种方式被删除。
答案 1 :(得分:2)
这是某些网站不允许抓取的原因。
file_get_contents('http://www.akaar.org/')
您可以从网站获取结果,这意味着托管此网站的服务器未配置文件墙以阻止抓取请求。file_get_contents('http://www.ptsda.org/')
在这种情况下,您将获得HTTP request failed! HTTP/1.1 403 ModSecurity
作为输出,这意味着服务器配置了防火墙,您将无法获得响应。详细了解ModSecurity。以下是解决方案,尝试使用CURL代替file_get_contents。注意:这是一个解决方法。
<?php
$curl_handle=curl_init();
curl_setopt($curl_handle, CURLOPT_URL,'http://www.ptsda.org/');
curl_setopt($curl_handle, CURLOPT_CONNECTTIMEOUT, 2);
curl_setopt($curl_handle, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($curl_handle, CURLOPT_USERAGENT, 'ptsda');
$query = curl_exec($curl_handle);
curl_close($curl_handle);
//print_r($query);
?>
答案 2 :(得分:2)
你的问题是ptsda.org的主机正在返回这个403(Forbidden)错误:
file_get_contents("http://www.ptsda.org"): failed to open stream: HTTP request failed! HTTP/1.1 403 ModSecurity
这表明他们已经有了保护措施来阻止他们的内容被机器人抓取。通过在PHP(See this question)中设置一个useragent字符串,你可能能够绕过这个。
答案 3 :(得分:1)
答案 4 :(得分:0)
终于找到了解决方案。
我将页面保存为HTML并将输入提供给我的php抓取工具。
<?php
$contents = file_get_contents("The downloaded HTML file");
print_r($contents);
?>
成功:)
感谢大家的回复。