【问题标题】:I need to write a web crawler for specific user agent我需要为特定的用户代理编写一个网络爬虫
【发布时间】:2011-08-25 13:00:24
【问题描述】:

我需要编写一个网络爬虫,并且希望能够使用已知的用户代理进行爬取。比如我想让我的爬虫充当iphone来爬取某个网站的移动站点,然后再使用Mozilla PC代理等进行爬取。

这样,我将能够抓取每种“类型”的网站(移动设备和 PC)。但是,我还希望能够设置我的爬虫的用户代理,以便网站管理员在他们的统计数据中看到它是一个爬虫访问了他们的整个网站,而不是真正的用户。

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

【问题讨论】:

    标签: php web-crawler


    【解决方案1】:

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

    10.15 用户代理

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

     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")
    

    【讨论】:

    • 你真是太棒了。这正是我所需要的。非常感谢你的帮助。非常感谢!
    【解决方案2】:
        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/ 不带用户代理,尽管大多数网站通过阅读用户代理将用户重定向到正确的内容。

    【讨论】:

    • 是的,我知道如何将用户代理设置为特定的浏览器和平台。但是,怎么可能也设置用户代理让网络服务器知道我们是一个爬虫。
    • webservers 不关心它是什么类型的流量,脚本或 .htaccess 是基于 useragent、ip、referrer 等重定向的内容
    • Lawrence:不,我真的需要让网络服务器知道我的爬虫是爬虫而不是真正的用户,因为我希望他们能够使用他们的 .htaccess 文件阻止我的机器人。我还需要能够将我的用户代理设置为移动设备,这样我也可以抓取移动网站。
    • @Steve Rodrigue,只要您不损害网站,没人会在意它是机器人还是用户。您可以在 User-Agent 中编写任何您想要的内容,但这并不意味着什么。许多机器人设置了 Google User-Agent,唯一的检查方法是运行 gethostbyaddr (PHP) 来查看它是否是 google.com
    • 你不能同时拥有这两种方式,如果一个站点正在检查用户代理以重定向到移动站点,那么你自己的将不会被检测为移动站点,但如果你改变它,你基本上会绕过它。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-06-19
    • 2011-06-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-02-28
    • 1970-01-01
    相关资源
    最近更新 更多