写在前面:
我的博客已迁移至自建服务器:博客传送门,优快云博客暂时停止,如有机器学习方面的兴趣,欢迎来看一看。
此外目前我在gitHub上准备一些李航的《统计学习方法》的实现算法,目标将书内算法全部手打实现,欢迎参观并打星。GitHib传送门
背景
这学期报了一门海量数据处理,在数据处理前需要爬取一些内容。所以做了一个小练习,爬取网易云的歌单。其中包括歌单名称,播放量和url地址。
网易云还是具有一些反爬措施的,这里主要说以下几个方面以及我的应对措施。
- 无法直接访问
我没有实践过直接访问网易云音乐会不会被报404,所以这一条本质上不太确定的,我的做法是直接在浏览器中通过F12查看请求头,在代码中将请求头加入其中以此来模拟我是浏览器访问的,但是后期因为使用了PhantomJS,也就不需要请求头的,后期的时候请求头就没有再用了。 - 动态页面加载
动态的页面加载导致正常的页面爬虫无法工作,在浏览器上看到的很多内容,通过python读取到html后在内部找不到对应内容。对应的方法是使用PhantomJS。PhantomJS按照我自己的理解,是模拟了一个浏览器,这样子可以最大程度上让服务器认为我是普通用户的浏览器,从而防止被反爬。此外上一条中说到使用这个以后不需要再加请求头也是这个原因,我的身份已经变成了一个浏览器,所以也就不需要再使用请求头来伪装身份。 - PhantomJS效率过低
PhantomJS毕竟是一个浏览器,在速度上有很大劣势,所以在使用时需要对其进行配置。从直观上来看,就是关闭浏览器的图片加载功能,打开浏览器缓存功能等等,所有的配置都和浏览器正常设置差不多,其代码如下:
service_args=[]
service_args.append('--load-images=no') ##关闭图片加载
service_args.append('--disk-cache=yes