我需要为特定用户代理编写Web爬网程序

时间:2011-05-14 14:39:13

标签: php web-crawler

我需要编写一个Web爬网程序,并希望能够使用已知的用户代理进行爬网。例如,我希望我的抓取工具充当iphone来抓取网站的移动网站,然后使用Mozilla PC代理等再次抓取。

这样,我就可以抓取每个“类型”的网站(移动和PC)。但是,我还希望能够设置我的抓取工具的用户代理,因此网站管理员还会在其统计信息中看到它是一个访问整个网站的抓取工具,而不是真正的用户。

所以我的问题是,你们知道如何在PHP中同时设置移动代理+爬虫代理吗?它甚至可能吗?

2 个答案:

答案 0 :(得分:3)

请参考RFC1945了解User Agent应如何形成:

  

10.15 User-Agent

     

User-Agent请求标头字段包含有关的信息      用户代理发起请求。这是出于统计目的,      跟踪协议违规,并自动识别用户      代理商为了定制响应以避免特定用户      代理人限制。虽然不是必需的,但用户代理应该      将此字段包含在请求中。该字段可以包含多个      产品代币(第3.7节)和识别代理商的评论      任何构成用户代理重要部分的子产品。通过      惯例,产品代币按其顺序列出      识别申请的重要性。

 User-Agent     = "User-Agent" ":" 1*( product | comment )
     

示例:

  User-Agent: CERN-LineMode/2.15 libwww/2.17b3

所以你放在那里或多或少取决于你。你可以冒充GoogleBot-Mobile:

或伪装成iPhone并添加自己的东西

Mozilla/5.0 (iPhone; U; CPU iPhone OS) (compatible; MyBot/1.0; +http://about.my/bot")

答案 1 :(得分:0)

    function crawl($url){

        $headers[]  = "User-Agent:Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.2.13) Gecko/20101203 Firefox/3.6.13"; // <-- this is user agent
        $headers[]  = "Accept:text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8";
        $headers[]  = "Accept-Language:en-us,en;q=0.5";
        $headers[]  = "Accept-Encoding:gzip,deflate";
        $headers[]  = "Accept-Charset:ISO-8859-1,utf-8;q=0.7,*;q=0.7";
        $headers[]  = "Keep-Alive:115";
        $headers[]  = "Connection:keep-alive";
        $headers[]  = "Cache-Control:max-age=0";

        $curl = curl_init();
        curl_setopt($curl, CURLOPT_URL, $url);
        curl_setopt($curl, CURLOPT_HTTPHEADER, $headers);
        curl_setopt($curl, CURLOPT_ENCODING, "gzip");
        curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
        $data = curl_exec($curl);
        curl_close($curl);
        return $data;

    }

echo crawl("http://www.google.com"); // revenge

您可以随时使用例如http://m.facebook.com/ w / o用户代理,但大多数网站会通过阅读用户代理将用户重定向到正确的内容。