【问题标题】:file_get_contents returns nothing on html inputfile_get_contents 在 html 输入中不返回任何内容
【发布时间】:2016-03-30 17:53:12
【问题描述】:

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

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

基本上我正在用 php 构建一个网络爬虫。当我成功爬过至少 150 多个网站时,它并没有爬过那个特定的网站。

【问题讨论】:

  • 所以我知道他们的服务器有安全性。但是我现在有了一个想法,有没有办法保存文件并将其传递给我的 php 爬虫? :P

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


【解决方案1】:

终于找到解决办法了。

我将页面保存为 HTML 并为我的 php 爬虫提供输入。

<?php

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

成功:)

感谢大家的回复。

【讨论】:

    【解决方案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 的更多信息。

    这里是解决方案,尝试使用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);
    ?>
    

    【讨论】:

    • 那我有办法吗?
    • 它对你有用吗?它不适合我。并且还看到我已经更新了我的问题。谢谢你..
    • 取消注释 //print_r($query);然后再试一次。你会得到输出。
    • 是的,我试过了。首先我尝试了我的爬虫,然后也在一个单独的文件中。没用。
    • 屏幕上没有任何内容。并找到了解决方案。
    【解决方案3】:

    您的问题是 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) 中设置用户代理字符串来绕过此问题。

    【讨论】:

      【解决方案4】:

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

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

      所以看起来他们有 Apache ModSecurity 保护来阻止他们的内容以这种方式被抓取。

      【讨论】:

      • 那我有办法吗?
      【解决方案5】:

      http://www.ptsda.org/

      是一个 Flash 网站,不能像 HTML 那样容易抓取

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2015-01-21
        • 2015-12-16
        • 1970-01-01
        • 1970-01-01
        • 2016-08-14
        • 1970-01-01
        • 2017-07-15
        相关资源
        最近更新 更多