从爬虫中我们能学习到什么?

        前段时间,帮公司搞了一下爬虫,爬取了一些数据给公司做业务分析用,有点小小的思考,在这里分享给大家!

注:本文涉及到的爬虫皆为java爬虫设计,但是关于爬虫和防爬的策略都是共通的。

爬虫这个东西,说起来可能有一部分人听着就烦,还有一部分人听着眼前一亮,这是为啥呢?我们都知道,技术是无罪的,有过的是使用技术的人,爬虫从最开的发展出来到今天也是走过了不少历程了,在我眼中爬虫有下面这几个作用:

       1、爬取别人的数据,为自己公司决策和其他方面做参考。

       2、爬取自己的数据,节省了跨系统跨页面的数据获取成本,所见即所得。

       3、做性能测试,测试web接口的稳定性和承载量。

       4、链路爬取数据,捕获用户行为信息,提供用户行为分析的数据来源。

对爬虫比较头疼的人:

      系统架构师,风控专家,web接口开发者等

对爬虫比较感兴趣的人:

     甲方,你的老板,公司的数据分析员,大数据部门

        由于业务的发展和爬虫应用的广泛性,其实在互联网上,大众已经逐渐接受了有爬虫的存在,并且形成了一个协定,就是允许你爬取我的那些地方的数据,不允许你爬取我哪些地方的数据(敏感性),或者是用哪些爬虫爬取数据。

这个在哪里可以看到呢?在大网站的主域名后面加上/robots.txt  就可以看到,比如我们看一下京东的:

https://www.jd.com/robots.txt

从爬虫中我们能学习到什么?_第1张图片

京东的协议页面就明确的指出了,不能爬取的页面(也就是disallow)还有不能使用的爬虫(user-agent)。

        有质素的程序员或者公司呢,都会先看一下这个地方的声明,然后再爬取这个公司的网站信息,但是你不遵守,倒是也是爬取到其他的一些信息,只不过网警或者被爬公司追查到你之后,可能会请你去警察局喝茶了。。。

        我实现爬虫的方式,从简单到复杂有这么几种:

     1、最简单的爬虫:其实就是对网站发起http请求,然后获得数据嘛,如果那个网站防护或者加密不是很严谨的话,我们这样的开发人员是很容易在浏览器的dev模式下,通过network分析出来他的页面加载了,返回list数据行的http接口了,如果登录再不需要认证的话,那么我们就可以直接发起http请求,根据他返回的数据声明实体,进行数据收取操作了。目前我写的最简单的爬虫就是使用httpclient,发送http请求,如果需要登录,则保留cookies的信息,然后重复使用在每个接口上,就可以实现登录访问了。

     2、稍微复杂一点的:你在浏览器dev模式下看不到network下的返回信息,但是这个网站有个特点,就是访问每个url是有规律可循的,比如在url里面就带上了检索条件,或者分页条件,拿csdn举例子,就是博客详情页面就是你的博客地址+博客id(一串数字),而博客列表就是博客地址+/article/list/+页数(第一页就是博客地址),这样,我们使用webmagic框架,就可以通过这样规律的地址实现设定爬取数据。

    3、再稍微高级一点的,需要使用到组合框架了,比如需要登录的,我可以模拟出来一个谷歌浏览器,然后手动登录,之后再用程序去扫描页面内容,这个可以使用到webmagic+selenium框架可以实现。

    4、如果是需要同时爬取多个页面,使用selenium可能比较消耗内存,可以搭配phantomjs来使用,他可以模拟一个浏览器内核,从而减少内存的占用等。

        从中这些来看,为了应对一些被爬取网站的制作需求,爬虫其实是一个综合能力考验的场所,比如http请求的使用,模拟,破解,缓存,间歇心跳等策略的使用等等。

那么我们从爬虫上可以学习到什么呢:

       1、任何一个技术都不是孤岛,都需要结合其他的东西来使用。

       2、技术是无罪的,爬虫这种技术可以为公司带来效益,也可以为公司带来官司。

       3、数据分析和埋点操作是每个公司都应该掌握的一项技术,在未来的发展中,为公司决策会带来不小的收益。

       4、我们再开发-设计网络接口的时候,也需要提防爬虫的存在,虽然不能避免,但是可以让他爬取数据的速度慢一点(当爬取速度没有数据更新速度快时,数据是无效的)

你可能感兴趣的:(爬虫,java,爬虫)