我是怎样把反反爬虫把数据爬下来的

  最近看到公司的商务一条一条的从某个网站上复制数据到excel里,于是乎就打算写个爬虫把那个网站的数据都爬下来.一般的流程是模拟用户访问->获取数据->解析页面元素->balabala想干啥干啥.但这个网站大概是知道自己对爬虫很有吸引力,于是做了反爬虫的处理.查看返回的数据有一段这样的代码:

void(function fuckie6(){if(location.hash && /MSIE 6/.test(navigator.userAgent) && !/jsl_sec/.test(location.href)){location.href = location.href.split('#')[0] + '&jsl_sec' + location.hash}})();
var content = _.template(document.getElementById('content_tpl').innerHTML)({
    error_403: '当前访问因疑似CC攻击,已被云防御拦截' || '当前访问疑似黑客攻击,已被网站管理员设置为拦截',
    url: document.URL.replace(/\</g,"%3C").replace(/\>/g,"%3E"),
    user_agent: navigator.userAgent,
    now: new Date(new Date() - -8 * 3600000).toISOString().substr(0, 19).replace('T', ' '),
    rule_id: parseInt('<!--RULE_ID-->'.replace(/\[|\]/g, '')) || '',
    from: encodeURIComponent(document.referrer.substr(0, 1024)),
    client_ip: '183.14.132.72',
    ref: encodeURIComponent(document.URL.substr(0, 1024))
});
document.getElementById('content_rendered').innerHTML = content;

不是很明白为什么要把拦截情况用js来处理,也有可能是通过js来拦截爬虫.总之让我感觉他是通过判断访问的客户端类型(userAgent)来反爬虫,这样就很好解决了.curl代码如下:

//欺骗服务端,隐藏自己的客户端
    public function liar($url)
    {
        $curl = curl_init();
        curl_setopt_array($curl, array(
            CURLOPT_URL => $url,
            CURLOPT_RETURNTRANSFER => true,
            CURLOPT_ENCODING => "",
            CURLOPT_MAXREDIRS => 10,
            CURLOPT_TIMEOUT => 30,
            CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
            CURLOPT_CUSTOMREQUEST => "GET"
        ));
        //伪造ip以及客户端
        curl_setopt($curl, CURLOPT_HTTPHEADER, array('X-FORWARDED-FOR:111.222.333.4', 'CLIENT-IP:111.222.333.4'));
        curl_setopt($curl, CURLOPT_REFERER, "http://www.test.com");
        curl_setopt($curl, CURLOPT_USERAGENT, "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/536.11 (KHTML, like Gecko) Chrome/20.0.1132.57 Safari/536.11");
        $response = curl_exec($curl);
        curl_close($curl);
        return $response;
    }

 

CURLOPT_USERAGENT这个值可以伪造客户端类型,这次程序中我把自己伪造成了Mozilla,同时怕对方拦截到我的ip而设置黑名单所以也设置了访问ip以及来路页面.这些应该是初级反反爬虫技术,不过可以爬下大部分的网站了.
拿到数据后,用simple_html_dom类来解析数据,具体就不放出啦~跟jq很相似的使用方法.爬下的数据,想用phpexcel导出,想存到数据库随便啦~

posted @ 2017-11-03 15:45  JOSEFA  阅读(2904)  评论(0编辑  收藏  举报
shopify traffic stats View My Stats