追逐繁星的孩子

お帰りなさい

首页 标签 归档 分类 关于
天猫,轻虐!
日期 2017-08-31   |    标签 Python   |    评论

前几天天猫店铺页(类似这种页面https://sanzhisongshu.tmall.com/view_shop.htm?search=y&pageNo=1#anchor)貌似增加了反爬策略,然后、、然后、、我就被它虐了无数次。

之前我抓取上述页面的时候,并没有明显的反爬策略在。所有当时就直接选择这种页面来抓取各个店铺的商品信息,也是轻松加愉快的完成了需求任务。但是,好景不长,该来的还是来了!!目前的情况是:当你使用同一个IP进行访问的时候,抓取频率一大,就会跳个登录框出来强制要求登录。那么没办法,硬着头皮上喽。

当时想到两种方法: 1. 代理IP轮着爬 2. 模拟登录

第一种方法需要稳定代理IP,目前没有稳定代理IP,网上爬来的代理能用的极少,所有暂时放弃这个方法。 第二种方法那就是直接干登录了。由于我爬的页面都是JS动态加载的,所有之前都是采用selenium的PhantomJS进行模拟浏览器访问的,所有就想着利用PhantomJS获取登录框元素模拟输入提交账号密码信息。之后分析页面信息,发现登录框采用的是iframe加载的,好吧,继续请求iframe原地址,发现返回的是一串JS代码。。我的天。。。好吧,考虑到时间精力,果断放弃之。

完了,无路可走了。。。。

好吧,其实还有一个方法。就是由用户自己手动登录。因为业务需求只是少量店铺的信息,所以这个操作不会太影响他们的日常工作。原理是这样的:放弃PhantomJS,采用Chrome来模拟。当爬到某个页面触发反爬机制的时候,由用户手动在页面中输入账号密码进行登录,那么之后ChromeDriver就会继续采用登录的Session进行操作。直到爬完所有商品信息退出Chrome。

按照上述方法抓取没问题,于是为了应急直接把项目更新了。后续再好好研究下看看有没有更好的方法吧!!!PS(阿里的反爬做得很不错,甚至是变态,但是有挑战不是么?)