浅谈美团爬虫

最近有做爬虫的需求,也做了好久,简单说下感受:大公司的数据是真的难爬,说难是因为别人有完全防止爬虫的手段,构造token仅仅只是九牛一毛,访问频率控制,图片验证码等等才是比较麻烦的事情。

构造token

通过浏览器的控制台可以解决,具体解决办法就是找到那个异步请求,构造相关参数,相关参数的构造在页面是可以找到,通过找参数名称,全局搜索,找到参数的定义,赋值就可以解决,其中uuid和token的值是需要变动的,其他的基本就是固定值,当然页码什么的就不提了,自己构造然后请求就可以

使用ip代理池

对于频率的控制,也不要对别人服务器造成太大的压力,每过两秒请求一次基本上可以接受,但是对于这个速度,美团依然给控制,所以,这个时候就需要使用到代理池,把请求代理出去,github上面有proxy_pool,可以使用,但是这个代理一般都是透明的一般代理,没有做到高匿性,还是会被美团发现,虽然proxypool可以获取高匿的代理(检验的时候判断一下,具体内容可以在项目的提问区看到,作者也解答了这个问题),但是一般一个网站就几个,完全不够使用,所以这个时候就要花钱了,买芝麻或者阿布云等代理,有点贵,前者一天1400个ip一天大概是30,后者一天无限制换ip,每秒10个请求的是30.其他的用过不怎么好用。其实用了高匿也没啥用,好像美团依旧在请求了次数多了之后403了,这个错误的出现可能跟我当时没有及时的跟换uuid导致的,

美团的302和403

302还不是是完全的没戏,只是让我们输入验证码,验证码不是很清楚,而且审查元素可以看到这个验证码是一次请求的,根本不能另存为,也不能找到url链接然后再地址栏上输入,直接会提示找不到这个东西(具体错误信息不记得了),为了防止别人使用验证码识别,比如我以前写的打码平台,就是说接入打码平台识别验证码是没戏了。手动输入验证码可以解决问题,但是这个就比较麻烦了。。。至于403问题,直接就拒绝请求了,这个完全没戏

分布式爬虫

后来又研究了使用分布式爬虫,不是scrapy-redis项目,自己写的scrapy和redis的使用,多台机器如何知道我当前爬得城市数据是不是被其他城市爬过了,重复问题。引入redis,多台机器把自己爬得城市存在set中,爬之前判断一下当前获取的城市数据是不是已经爬过了,如果是直接忽略,不是才继续,还有就是正在运行的爬,别的爬虫也不能去爬,通过代码控制,这种方式可以是可以,但是花费的钱有点多,肉痛。

速度问题

这个问题困扰了我很久,因为需要所以需要在尽可能短的时间内获取完数据,所以尝试了很多种方式之后,想到了一个笨办法但是也是比较有用的办法,就是把json数据dump下来存起来,如果这个数据有就不去请求,没有的话才去请求,这样可以减少很多请求,避免美团拒绝你的请求封你的ip。可以分开请求,获取json数据的是一台服务器,专门使用高匿代理的疯狂获取数据的是另一个。

爬虫资料少

爬虫一般算是偷别人的数据,一般都会防止,而且这个东西看情况,算是违法的东西,比如在知乎或者其他平台上发布的话会有可能被封禁,就是说这个资料比较少,而且这个更新的也比较快,几个月以前的东西几个月后可能就用不上了。我试过加两个搞过这个的人的联系方式,但是没有一个人同意。。。。

敬畏之心

别人的数据,尽可能的别对别人服务器造成太大的压力。几秒一次一般就够了,也不算太过分。

拒绝服务

最近发现现在是直接拒绝服务,连403页面都不给我了,我。。。。。重定向一串没什么意义的url,后面参数是originurl。。。。才是我的url。

2019-9-5 更新

又发现一个有意思的现象,晚上爬数据的时候验证的概率会很大,白天的时候出现了验证页面,后面的数据依旧可以获取,但是晚上就不行,这个现象在中午附近尤为明显。。。

另外的一种有效途径

其实最好也最高效的一种做法是,能够识别出验证码,只要出了验证码,输入正确,速度又飚上去了。

版权说明

可能会涉及到侵权的问题,如有侵权,请及时联系本人删除,代码就不贴了,分析过程也不打算加。本人邮箱wqh0109663@gmail.com

0%