初级反爬
初级反爬无非就是设置headers,cookies,等
这样的反爬策略是最常见的,下面是一些对于初级反爬的总结
headers里面有几个参数是值得注意的:
referer: 标识你从哪一个地址跳转过去的
cookie 里面有些用户信息等,很多需要登录才能访问的网站或者是一些电商网站使用这个来进行反爬的,当里面的信息过时之后,网站就会把你重定向到登录界面。你可以定期更换cookie,这就可以降低反爬的概率了。
user-agent 标识你的浏览器信息
accept-encoding 接收到信息的编码形式,额…好像遇到过一次,之后忘记改成什么了,就很玄学的解决了问题。当获取不到信息,或者获取到乱码时,可以试试加上这个参数。也要注意在解析返回的信息之前要解码等问题。
中级反爬
一、 遇到过的中级反爬就是封锁ip,让你不能获取任何信息。
这个我现在有两种方法解决:
1、 如果你是个大土豪,就可以购买一些代理ip ,这些ip价格不菲(对于我来说,几十块钱用个几分钟,太TM贵了。)
2、 如果你和我一样,那就推荐第二种方法——用时间代替金钱。降低爬取的速度,在scrapy中可以将下载延迟设置为3及以上。我在爬取京东商品的时候,将其设置为3,大概在半小时后获取不到数据了,在这期间大约能获取200条有效数据。每半个小时停一下,过个十来分钟在重新启动一下。额。。。首先你得设置redis,让你的虫子能够断点续爬吧。不然,你懂的!!
二 还有一种是用Ajax传送数据的方式。
所谓的Ajax就是用js传送数据,这可以提高浏览器展示数据的速度,也可以避免初级爬虫爬取数据。
比如获取京东商品的评论信息:
点击只看当前产品后,可以在network选项卡下的js类或者是xhr类中找到评论信息。这就是用Ajax获取的信息。上图中的网址是一个接口,通过传递不同的参数,就可以获取到不同的信息了。比如,换个商品号就能获取到别的商品的评论信息。
里面的很多参数,是可以去掉的,这需要你自己试试。
这年头还得会两句英语才行,呜呜呜呜呜
这样的传值方式,返回的是json数据格式,直接用json解析就可以了。如果不可以,就要检查一下返回的json数据是不是有什么错误。
高级反爬
目前遇到的高级反爬有两种:
1、 当调出控制台时,要么会一直弹窗提示,要么会直接debug,让你不能用控制台获取信息。
2、 弹出验证码,只要你的访问频率过高,就会弹出验证码。这个,你可以试一试淘宝,点击的频率快一点就会出现惊喜。
这些高级反爬,可以用自动化的技术获取信息,不过这样比较慢。
目前能力有限,还没找到合适的解决办法。以后,边找边补吧。