开发背景
本人算是程序小白的阶段,目前大四,刚进公司实习,被分配了一个使用爬虫技术多账号轮流登录抓取某个险企网站数据的需求,之前没有怎么接触过,组里的人之前也没有开发过爬虫的,一路走来,都是自己通过网络进行学习,差不多3个星期,才解决了这个需求。
这一段时间,我对爬虫也是有了一定的理解,对http网络协议、ssl证书等也学习了很多,特以此系列文章作为记录。整个系列文章的顺序,也大致会按照我整个开发过程摸索的顺序来写。
爬虫
接到这个需求,对爬虫技术几乎没什么了解的我,第一个想法先是去了解一下爬虫的原理和实现方式。
爬虫是什么?
爬虫的英文叫spider/crawler,形象点就是在你开发的程序在互联网这张大网按照你设定的规则、路径去爬行,抓取你想要的数据。
万维网上有着无数的网页,包含着海量的信息,无孔不入、森罗万象。但很多时候,无论出于数据分析或产品需求,我们需要从某些网站,提取出我们感兴趣、有价值的内容,但是纵然是进化到21世纪的人类,依然只有两只手,一双眼,不可能去每一个网页去点去看,然后再复制粘贴。所以我们需要一种能自动获取网页内容并可以按照指定规则提取相应内容的程序,这就是爬虫。
原理
传统爬虫从一个或若干初始网页的URL开始,获得初始网页上的URL,在抓取网页的过程中,不断从当前页面上抽取新的URL放入队列,直到满足系统的一定停止条件。聚焦爬虫的工作流程较为复杂,需要根据一定的网页分析算法过滤与主题无关的链接,保留有用的链接并将其放入等待抓取的URL队列。然后,它将根据一定的搜索策略从队列中选择下一步要抓取的网页URL,并重复上述过程,直到达到系统的某一条件时停止。另外,所有被爬虫抓取的网页将会被系统存贮,进行一定的分析、过滤,并建立索引,以便之后的查询和检索;所以一个完整的爬虫一般会包含如下三个模块:
- 网络请求模块
- 爬取流程控制模块
- 内容分析提取模块
(PS:这里说的是传统爬虫,指的是你的下一层url是可以从上一层页面中抽取到的,但是很多反爬虫的网页会有很多反爬虫机制,这个之后再说)
网络请求
我们常说爬虫其实就是一堆的http(s)请求,找到待爬取的链接,然后发送一个请求包,得到一个返回包,当然,也有HTTP长连接(keep-alive)或h5中基于stream的websocket协议,这里暂不考虑,所以核心的几个要素就是:
- url
- 请求header、body
- 响应herder、内容
抓包分析,请求调试是爬虫中两个很重要的步骤。浏览器一般自带调试功能,chrome和Firefox都蛮不错的,另外推荐两个工具:fiddler(全局网络抓包工具),postman(网络请求模拟工具)