关于爬虫的一些个人心得

1,115 阅读5分钟
原文链接: zhuanlan.zhihu.com

更新一篇,总结下这小半年的心得。

上周一同事问我能不能接个私活,大概就是对x点中文网做一个增量更新,需求包括免费和付费的抓取,在这个phper同学看来,付费=免费 在爬虫眼里,只要拿到url就能请求。

(这里举个栗子,翻墙出去某个网站,下载视频,不是会员下载不了,确实拿到url了啊,是真实的。原因很简单,就是服务器会对你进行cookie验证,会去验证是不是会员,同时也不支持断点续传。)

接上上段,话是没错,但是这个url怎么拿呢,看了起点中文网,从首页去看vip内容,那是个假url,点进去只有一小部分。

那就先看看免费,打开章节页面时候是url是乱码,并没xxxx?xx=xx&xx=xx这种。那就看看cookie里有没有类似page的字段,然而章节和cookie没有多大关系。每一个章节的url看着像乱码,在不知道生成规则时候,反向推url没用呀。

知识点 1:有的网站会把请求信息放在cookie里,通过去构造cookie请求拿到目标页面



之前的同事去了x面新闻后,有一天发我一个url让我看看怎么获取数据,打开url看看源码,嗯,所有模块异步加载,同时有token验证。一时间这个加密的js没找到。

随后,我提醒去看看app上面有没有数据。

然后打开app,抓包,数据整整齐齐躺在json里。

知识点 2:手机性能有限,反爬虫并不能做到像客户端那么恶心,网页没办法的时候,看看app


在我上家公司需要拿x众点评的数据,从列表详情到评论。

笔者有印象17年11月后更新了反爬虫策略后,数据一度不好爬取了,各种眼花缭乱的token。

当时基本功不足,就放弃了。

前段时间突然想起了,再来看看x众点评的数据,嗯,反爬虫更恶心了,评论数据需要登录,现在加入滑动验证部分,这个看来是像阿里系学来的,用来ban掉那些用selenium + chromedriver/geckodriver 的

另外据上家公司的同事讲,眼花缭乱的token是一个障眼法,真正的反爬在别处。

知识点 3:反爬虫的核心思想是让你拿到数据的成本增加,而不是想的不让你拿,毕竟爬虫的思想是 可见即可爬


接着说这个x众点评,网页拿不到,那就看看app呢。打开x团,我这里抓包工具用的charles,咦,app不加载。 看来是加入SSL Pining了的,好吧,whatever,我有办法。

emmm,怎么还是抓不了包,仅仅只能抓到图片的包。

笔者开始怀疑走的不是TCP? 那行啊,走的是UDP对吧,这么虎!

随后底层抓包,这里用的是Wireshark,一路看下来,然而并没看到UDP的包。

这里笔者开始在怀疑这个app的请求走的是私有协议,那怎么办,除非内部人士告知,不然就真的没得搞了。

这个部分属于个人的猜测,懂得人看到望指正。

知识点 4:抓包app抓不到包,不加载那就是SSL-Pining,抓不到包要么 udp要么私有协议了。


这家公司刚入职那会儿,需要大量的汽车数据。

到汽车配置这一项时候,当然去x车之家啊,但是人家有字体反爬虫啊,还是教科书级别的。

行行行,那我看app咯。抓包也是ok 的,那行,咱们通过app去拿数据。

等会儿,人家的url怎么是 https://xx.xxx.xx.xx/xx 这种,怎么是ip地址

咦,代码里去请求这个url怎么被ban

看来是上了cdn

知识点 5:很多app上了cdn,抓包获取的地址,是人家cdn服务器的地址,所以真是的服务器地址呢,怎么去获取。笔者目前没解决。


好吧,x车之家,那咱们只能硬肝了,研究页面的js,找到动态加载的字体库,还原回去。

知识点 6:很多时候你需要的js就在页面的html里,并不是打开network一个js接着一个js去找


之前有一个需求是模仿用户登录x宝。

登录啊,好吧,我去调研下,没研究过x宝,自己闹着玩的时候研究过x浪x博的登录。

然后发现登录参数又长又恶心,其中有个字段每天都要变化,这个用代码来模拟太麻烦了。

遂拿出我不太常用的selenium + chromedriver, 发现滑动验证不能通过。

后来笔者琢磨,应该是一开始人家就检测到这是用selenium驱动的,被当做爬虫。

不过后来改成扫二维码登录,能成。

在Stack Overflow上面关于这个的讨论有

知识点 7:类似逻辑回归,浏览器指纹是很重要的被识别为人还是机器的依据


随着脚本的越来越多,维护的成本增加。

一方面来着网站自身的迭代,一方面是自己脚本的运行。

慢慢一个人的工作量会被维护占去一大部分,这里就需要一个管理工具了。

那就是抓取平台,笔者这几月都在绞尽脑汁想这个平台怎么来写。

无奈基本功,特别是开发上面的欠缺,需要恶补的东西很多。


好了,就想到这么多。

另外,敏感的项目栗子笔者也不能说。