2:跟以往静态爬虫不同,以往的curl获取资源再解析和Xsoup/Jsoup等爬虫都只能够爬取网页上已展示出来的静态页面,动态加载的数据都无法获取。这套系统能爬取任意一种触发条件后出现的动态数据(包括滚动,懒加载,点击,自动输入设置好的参数,鼠标悬浮)。
如果当爬虫用,什么网站可以爬取?被抓取的网站有什么防范措施?
目前测试成功的有各种新闻页面(某浪新闻,搜某新闻),各种论坛和小说贴吧漫画之家,各种小说网站(红某某香,天某涯)等等,在测试时候多次爬取某宝商品二三级详情页的时候会被检测出机器人操作,随即要求你登陆某宝账号,后来用一个小号账号密码作为输入参数给机器人拿去输入登陆,但是有图片拼图识别认证,要拖动拼图准确拼入不同的位置,这一部分要破解要下成本做图片识别,所以没有继续下去,只草率抓取了一些一级页面图片和产品信息。
经过多次测试由此可见,要防范爬虫其实还是比较好入手的,加一些检测,对异常用户添加设备号和IP的灰名单,放拦截器去拦截那一部分用户强制登陆或者强制验证(拖拽拼图,点点乐,计算题等等,这些前端都已经很多了),验证成功后再放开拦截。
说完了它能干什么,那么下面开始介绍下使用到的技术
selenium:
它是用JavaScript写出来的一套自动化测试工具,因为是用JavaScript,所以它能支持大部分浏览器(IE6以上,Firefox火狐,Google Chrome谷歌,Safari等等),装了相对应版本的浏览器驱动后,它能自动调起浏览器自己进行操作,爬虫中它就是冲锋士兵去触发全部的JavaScript页面渲染,数据都出来后,爬虫再进场收割数据返回。因为浏览器各个版本都有对应各个版本驱动,所以一定要准确安装,不然启动不了。
IE的驱动下载地址:http://selenium-release.storage.googleapis.com/index.html
Firefox火狐驱动下载地址:https://github.com/mozilla/geckodriver/releases/
Google Chrome谷歌驱动下载地址: http://chromedriver.storage.googleapis.com/index.html
下载后记得要把driver驱动的下载好的路径配置到环境变量里面去,不然会报错找不到对应的驱动,下载错了版本也会报错找不到对应驱动哦。
web Magic:
web magic就是一个爬虫框架,不需要配置什么(Java 项目中只需要加入它的maven以来),便于使用和二次开发,很多方法其实跟你获取前端元素一样,可以通过dom对象操作获取(根据ID,name,tag标签名,正则表达式都可以),支持开多线程抓取,自动定时重试功能,分布式抓取等等都可以随心所欲。
web Magic最重要的有四个模板
插入图片描述看图看英文很难理解,这里粗暴简单翻译一下:
Downloader:这个我们基本不用管,它是从网上下载页面的其实就是一个curl的作用。拿到Page资源后下一步就交给PageProcessor。
PageProcessor:很重要的一个模块!!解析页面并且根据规则抽取数据,在这里可以定义重试次数,重试时间和重试超时,还可以定义selenium调用浏览器驱动无页面启动等等(后面会有详细的代码解析)。
在这里插入图片描述
Scheduler:抓取的二三级URL管理,把重复URL去掉,然后根据业务需求可以再到二三级甚至更深一级的子页面去抓取,这个步骤又回到Downloader,再到PageProcessor解析,再拿到深一级的URL,所以前三个是一个闭环,可以根据业务需求不断拿到新URL去重后一层层探索下去,不断重试,设置超时等处理,直到拿到你自己想要的数据直接返回。
Pipeline:对抓取到的数据进行处理,可以直接保存到数据库或者拟定一些POJO装着直接返回,或者可以再对抓取数据进行一些处理后保存到redis,mysql,oracle持久化处理都可以,这里就像是厨师,让你对拿到的食材(数据)任意加工处理。
好了,下面开始爬取某里巴巴的批发网站1688网商品数据实战演示(代码已经放上github可直接下载启动学习,代码GitHub地址:https://github.com/jojo-AI/spiders)
再来看下写在Controller里面的代码(解释都写得很详细了,有疑问的地方可以留言。)