返回到博客
爬虫的一点tips
我有位同事曾多次跟我:“最佩服的不是你的写代码能力,而是获取数据来源的能力,什么找接口、逆向、漏洞等等。”(这是在嫌疑我的代码么?)
没错,爬虫系统框架发展到今天,已经走向配置化,自动化,还需要人肉写代码的情况已经不多了。性能在数据抓取上已经不是问题,数据抓取的难点可能更多的是在数据源的寻找,抓取途径的选择上,以及如何应付对方的反爬机制。
从某种意义上来说,数据抓取可能不单纯的属于开发类,同时会涉及安全方向的很多内容。更多的是偷别人的数据,而不是抢。你看,如今社会,一片祥和,强盗不多,但小偷仍是层出不穷。对爬虫工程师来说,想对数据抓取得心应手,修炼一手炉火纯青的偷窃技术是必不可少的。那么,这个系列我会分享一些自己在这方面的经验。
注意,
- 数据抓取一定要温和,不要没有操守地一次性讲对方拖跨
- 只能获取公开数据,坚决不要使用利用XSS等攻击方式获取敏感信息
- 发现对方有漏洞可以利用后,先上报给厂商
- 再说一边,慢慢抓,不要猛搞,影响对方正常浏览
这里我先罗列一些之后会分享到的内容,每一点都能算得上是一个小的技巧,我所分享的这些,可能各位对其都熟悉并在工作中有所应用,但是对于一些新人来说,仍不乏会有一醍醐灌顶,茅塞顿开的效果。
- 抓取源的选择
这应该算的上是最初级的技巧了,基本只要从事过一段时间数据抓取工作的人都知道。但据我所见,仍有不少人,也不乏有一段时间的爬虫工作经验的人,他们对数据来源的认识只是停留在桌面浏览器的web界面中,他们始终认为所见即所得。
我们经常会遇到一些不能够直接在桌面浏览器中被看到,或者说这一类的数据更利于我们来抓取。选择一个合适的数据抓取来源,会发现后续的抽取工作会大大降低,抓取的效率也有很大的提升。
- 数据抓包的方式
抓包的目的,无非我们是想看下是发出什么样子的请求猜能拿到我们想要的数据。大多情况下,我们所说的抓包指的是狭义上特指HTTP协议的数据包,但特殊情况下也会涉及TCP的数据,但这时我们一般不是从中获取数据,更多的是在通过重放等方式来确定对方的漏洞。 当然也会有用来做协议分析的时候,但对于爬虫来说,我们要尽量避免取分析协议,我们不一定能够承担得起做协议分析的时间本,需要采取一些特殊的方法来获取数据,在具体文章中我会用微信抓取来举例说明。
- 巧用搜索引擎
搜索引擎是很好工具,除了检索资料,社工等这些常规用途,对爬虫来说,通过搜索引擎来找一些突破点也是常有的事。 通过抓包的方式,我们可能只能找到一部分的数据接口,或者说这些接口的校验策略比较繁琐,不利于快速的进行数据的抓取。 那我们不妨利用搜索引擎来寻找一些特殊的页面,多数情况下,我们会有很多意外的收获。
- 猜测后台实现,寻找漏洞
这里可能更多偏向于安全的范畴,但是我们爬虫工程师不妨利用这里面的一些方式来抓取我们想要的数据。当然从某种角度来说,这个做法并不可取,当发现厂家有漏洞时,理应及时向其报告,帮助其完善后台系统,避免造成更大损失。我这里只是提供这个思路,具体问题的取舍,这个各位自行把握。
- 要会JS哇
不会JS的爬虫工程师,怎么能抓得好数据呢?很多情况下,我们要去分析其JS代码,来达到我们数据抓取的目的。一般是两种情况:1. 分析数据流和处理逻辑,比如实现Web微信;2. 反爬策略的分析,当你直接在浏览器访问数据接口时,发现取不到数据,这时候可能对方在JS里面有认证策略。
- 客户端抓取怎么办
抓取时,当Web端久攻不下,或者处理异常复杂时,我们应该要换一个方向,从APP端入手。APP端抓取的几个有点:1. 数据规范,大部分情况下回事JSON或XML;2. APP后台反爬策略相对宽松。那么,当确定要走APP抓取时,我们第一步应该怎么处理,中间会遇到哪些问题呢?
- 突破反爬策略
爬虫与反爬是相通的,所谓知己知彼,百战不殆。反爬系统必然是知道爬虫会使用怎样的方式来盗取数据,而爬虫工程师也理应要知道反爬系统是怎么执行他的反爬策略。一般的情况,中了反爬可能只是没有数据,但是有一些公司会直接将爬虫引入蜜罐,返回伪造的假数据,我们的爬虫并不能区分这些假数据,直接增加了爬虫的成本。那么,在对抗对方反爬策略时,我们应该要有怎样的一个思路呢。