关于Java爬虫工程师(中级)应该会的技术与知识

关于Java爬虫工程师(中级)应该会的技术与知识


  • 数据包及抓包相关内容
  • 数据的追踪与反追踪
  • 数据的整理与维护
  • 常见反爬思路及反反爬思路
  • 调度器与下载分离,且学会使用配置文件
  • 学会使用python脚本来调用python库
  • 对目标源的搜集要学会套用SEO思路
  • 学会一种融合的搜集思路

如果没有看之前的初级篇的话,建议还是去看一下,因为确实引了很多新人入手的链接及资料查找思路。下面进入正题:


数据包及抓包相关内容

直接开始最主要的部分。首先,数据包这东西到底指的是什么,为什么要去了解这个东西?
引用一下百度百科的开头介绍:
包(Packet)是TCP/IP协议通信传输中的数据单位,一般也称“数据包”。
TCP/IP协议是工作在OSI模型第三层(网络层)、第四层(传输层)上的,帧工作在第二层(数据链路层)。上一层的内容由下一层的内容来传输,所以在局域网中,“包”是包含在“帧”里的。
这里我所说的数据包,并不一定是TCP/IP协议下的数据包。这里还要来说一下网络七层模型(OSI)与各协议之间的关系。OSI,由低到高:物理层->数据链路层->传输层->网络层->会话层->表示层->应用层。那么我们来逆向思维,应用层,就是我们能看到的嘛,也就是接近web界面的东西了。那web界面那些数据依据什么协议传输呢?一般都会想到其中的一个http协议。表示层及会话层的东西呢,在目前爬虫里至少还没有做的那么深,这里跳过。然后就是网络层了,网络层里有什么呢?TCP and UDP,也就是说我们既然是经常抓的web上面的数据,那么抓包的话至少要看到TCP里面的东西才可以,也就是至少要渗透到网络层。剩余的层呢,因为不需要去做很深的工作比如嗅探等,所以也不介绍。
因此在中级爬虫的领域,我们要去了解的协议,必不可少的是http,tcp,那么,我会问一下我们到底了解了多少呢?简单列举下,源端口、长度大小、标志位、序号等。为什么要去了解这些东西呢,虽然看上去知道与不知道这些并没有什么区别,但是一定要去了解,因为在一些发爬研究中你就必须知道这些内容。我们怎么去获得数据包里面的这些内容呢,其实也很简单,好多博主都给出了文章,比如:
Wireshark-TCP协议分析(包结构以及连接的建立和释放)
https://blog.csdn.net/ahafg/article/details/51039584
既然到了抓包这部分,再来说一下抓包。我们抓包到底该怎么抓呢?用自己的IP去抓吗?当然不是,你会瞬间被人家记录IP地址。我们可以用代理ip去做探测工作,那代理ip我们应该怎么找呢?首先我们最好是找高匿的代理,找不到的话随便一个代理都行。然后把代理挂到不同的浏览器中去探测,如果你感觉下载很多个类型的浏览器很麻烦,可以使用一款最近出来的比较好用的软件叫postman。它主要做的工作就是模拟你的request数据包去给目标网站发送请求,然后得到相应的response。当然了,是建立在代理ip基础上发送的数据包,这个软件因为是图形化界面所以用起来比较方便。代理ip怎么去做呢?不知道有没有了解过动态代理链或者随机代理链呢?(这里只是提供一个思路,是次要的,毕竟代理不好的话排查起来也很麻烦)代理ip的操作网上有很多教程,搬一个下来即可。初步的伪造身份工作做好之后呢,我们去寻找一款喜欢的抓包工具去抓包,这里就不列举了,多的很。然后为了去研究反爬到底对我们的数据包做了什么呢,我们要去打开wireshark这个抓包工具,从我们发送的ACK包开始寻找为什么我们得不到receive包的原因。找到之后呢,我们可以寻找更多的思路,接下来就是渗透的思路了,比如在输入完正确的验证码的时候,能不能抓到新出现的包,能否找到目标的ip/端口等信息,如果目标数据库的ip与该目标的ip处于同一c段呢?我是不是可以查看开放的端口?如果我能找到目标网关ip呢?等等等等。
中级大致有些掌握有些了解就可以了,有方向走才不至于卡到什么什么瓶颈。


数据的追踪与反追踪

这里的意思我是想表达这是对目标网站的监视部分。即如果你去抓一个目标网站,且目标网站是动态网站,那么怎么去做增量?怎么去判断这个源地址及信息是变化了还是没变化。
首先要了解,这是个对抗与反对抗的行为,你想简单的追踪我的数据,我肯定不能让你轻易追踪到,而且你想用监控的爬虫来日常监控我,我肯定也不能让你轻易监控。所以,我还是以常用的为例。我们应该知道缓存型数据库,像redis,这类似是key-value型的数据库,当然还要mongoDB。我们可以把它当作中间件,我们不把每次抓到的url基本信息存到队列里了,我们放到数据库,这样关机什么的,至少丢不了数据。然后我们可以指定相关的更新字段,版本号等标志位来进行追踪定位。如果我们的网站有非常之多,我们可以定义一个优先级的字段,先追踪优先级高的再追踪低的。接下来开始追踪,定义一个规则库,维度根据业务由大到小,怎么去定义这个小的维度呢?因为追踪的话,我们业务都是不一样的,那怎么通用啊?主要是一个思路:能符合业务线每天需求的最新数据的索引查询够快。比如舆情,我要最新的数据,越快越好,那就去分析这个网站数据到底每天怎么变化的,业务需要的数据大致能怎么分类,如何将文字搜索转变成最快的索引搜索等。
再说一下反追踪,反追踪就是在你的监控爬虫被目标站点识别出来之后,可能修改了源网址的访问信息,使你的爬虫不能正常工作。那么我们要做的工作呢,就是渗透里面的情报收集。在一开始确定目标源的时候把它的基本信息都存到数据库的一张单独使用的信息表里,比如它的domain,服务器ip地址,所属地,主页的相关链接等。就说这些把。


数据的整理与维护

这块就是根据业务需要啊,数据分析啊,数据仓库啊什么的,将线连起来。然后再打造一个爬虫的数据库信息,比如基本信息表,网站维护表,规则表,分类表等。这样分开的话做索引的思路就会清晰很多。主要是知道分开存放的思路就好,可能ETL在这方面做的会更多。
然后偶尔也要做一些速度测试,形成一套测试数据,来检查与目标源的数据传输情况。


常见反爬思路及反反爬思路

反爬思路,反反爬思路在网上例子也是非常多的,直接参考就可以了。
最全反爬虫技术介绍
https://blog.csdn.net/vampirekalus/article/details/79779779
Python网络爬虫反爬破解策略实战 作者:韦玮 转载来自: 云栖社区
https://yq.aliyun.com/articles/149571
简单列一下反爬:
1.限速 2.ip被检测到 3.验证码 4.js跳转 5.token加密 6.js加密 7.数据伪造 8.身份验证
9.c段查封 10.ip被列黑名单
反反爬思路:
1.切换ip,排查客户端与服务端哪边的原因
2.切换ip,ip池等
3.最简单的接人工大码;难的机器学习训练,最新第3代验证码:点击+顺序+不规范汉字+图片背景
4.phantomjs,chromeDriver….
5.phantomjs,chromeDriver….
6.phantomjs,chromeDriver….
7.不能用phantomjs的,就找js公式然后模拟发送http数据包
8.能找到get/post发送的url的话最好,不能就selenium模拟
9.切换其他c段ip
10.排查列黑名单的原因,永久查封总有原因吧。然后切换ip


调度器与下载分离,且学会使用配置文件

意思就是说管理端与下载端要分离开,因为管理端任务并不多,一个主线程就可以搞定。下载端因为任务量巨大,所以要开多个线程去下载。有时还会开多个进程,如果不把这两个部分分离开,那么管理端也用了这么多线程,如果一个下载线程卡壳了那全程都卡壳了。同时分离开也方便后面的二次种子下载入队。
配置文件分为基本配置文件以及数据配置文件,也就是说在这里我们就要为之后的规则库打下基础了,否则抓完数据之后会很乱,而且不易追踪。


学会使用python脚本来调用python库

就随便说一点吧,目前主流的渗透工具都是python写的。因为python有个比较好的特性就是调用了module模块,而每个模块相当于封装到了不同的库中,即想用到什么模块的时候就引入什么模块的库。比如目前的验证码识别这里,tesseract在python里面被应用的例子相当多了,如果你会python脚本,写一个简单验证码识别,然后放在phantomjs里面调用一下,不就直接搞定简单的验证码了吗。
再一个就是最近的机器学习,深度学习,几乎都是用python的多。因为跟数据打交道,免不了要配合分析工作,而分析工作主要用的是python语言,虽然hadoop主要是与java耦合度高,但是还是要兼顾两边工作同时进行才行。


对目标源的搜集要学会套用SEO思路

对目标网站进行SEO搜查工作的话,可以发现该站点的搜索引擎收录排名,备案记录,创建时间,PV等值,可以进行参考来筛选有高质量数据的网站。


学会一种融合的搜集思路

综合的搜集思路就是我说的要像渗透那样去认真对待搜集工作。

最后:
因为时间原因,还要面试等情况,虎头蛇尾了点,稍后有时间的话我会再补充的。

你可能感兴趣的:(爬虫技术)