file_get_contents在html输入中不返回任何内容

时间:2015-12-24 09:12:23

标签: php web-crawler file-get-contents

file_get_contents()会在www.akaar.org上返回正确的文件内容,但不会在www.ptsda.org上返回。

主要区别在于akaar.org是一个php项目,ptsda.org是html。

基本上我在php中构建一个Web爬虫。当我成功浏览至少150多个网站时,它没有抓取该特定网站。

5 个答案:

答案 0 :(得分:2)

ptsda.org返回此403(禁止)错误:

failed to open stream: HTTP request failed! HTTP/1.1 403 ModSecurity Action

因此看起来他们已经采用Apache ModSecurity保护措施来阻止他们的内容以这种方式被删除。

答案 1 :(得分:2)

这是某些网站不允许抓取的原因。

  1. file_get_contents('http://www.akaar.org/')您可以从网站获取结果,这意味着托管此网站的服务器未配置文件墙以阻止抓取请求。
  2. file_get_contents('http://www.ptsda.org/')在这种情况下,您将获得HTTP request failed! HTTP/1.1 403 ModSecurity作为输出,这意味着服务器配置了防火墙,您将无法获得响应。详细了解ModSecurity
  3. 以下是解决方案,尝试使用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)

http://www.ptsda.org/

是一个Flash网站,无法像HTML那样轻松抓取 enter image description here

答案 4 :(得分:0)

终于找到了解决方案。

我将页面保存为HTML并将输入提供给我的php抓取工具。

<?php

     $contents = file_get_contents("The downloaded HTML file");
     print_r($contents);
?>

成功:)

感谢大家的回复。