“ 站在巨人的肩膀上,才能看得更高、更远!”
大神徐麟(公众号“数据森麟”)写过一篇爬取懂球帝女神大会数据的文章,非常棒,自己闲来无事,也尝试着做一下。(关键是年尾了,墙裂需要女神们来养养眼)
01.准备
02.处理API
从巨人(徐麟)的文章中看到了一个宝贝,那就是懂球帝居然有个API可以调用,拿来主义搞一下:
http://api.dongqiudi.com/search?keywords=%E5%A5%B3%E7%A5%9E%E5%A4%A7%E4%BC%9A&type=all&page=1
尝试着在浏览器访问,发现当page等于7的时候就不会返回数据了,所以处理API代码如下
这里的print只是调测时使用的,可以注释掉,这里结果也不贴出来了,比较长。
代码里维护了两个列表nvshen_id_list和nvshen_id_picture都是留待后面使用的。主要获取API里的id和thumb字段,分别存储的是女神HTML页面ID和女神美照。
03.处理页面数据
页面数据的获取及整理还是处理了很久的,因为是循环处理不同的HTML页面,期间还是遇到了一些问题的,先上代码:
KENG1
这个页面是有一个小小的反爬机制的,需要校验cookies和headers,这里用chrome浏览器的F12查看浏览器访问页面时的cookies和headers是怎么样的:
可以看到,cookies还是比较多的,经过测试使用laravel_session里面的cookie是可以的,然后headers添加了User-Agent和Connection两个参数,这样就能正常获取到响应了。
KENG2
因为上面提到的API返回的数据,有一些对我们来说是无用的,所以代码里使用try-except(continue)来处理,当API返回的内容里包含的id并不是我们想要的页面时,代码处理逻辑出错,需要continue下去,循环其他的id页面,继续抓取。
KENG3
因为是循环获取列表nvshen_id_list里的数值,然后拼接成网页,再获取网页信息并处理网页数据,但是这些网页的内容格式不尽相同
,同一套处理逻辑不能完全通用,所以才使用了比较多的if语句来加以判断。比如获取女神评分的时候,很多页面的格式都是不统一的,需要特殊处理下,当时的内心其实是崩溃的
。
KENG4
最后再来说说get_picture函数,其实思想差不多,封装一个函数就是为了代码简洁一些(虽然这个爬虫代码已经写的很菜了)。
KENG5
最后的最后,还有三位女神没法统一用代码处理
(我是不会承认我菜的
),其实应该是可以同样用代码来处理的,但是因为就三个,索性偷懒啦,不想再写过多的逻辑判断了,自己也觉得没有必要(强行为菜开脱
)。
好了,历尽艰辛,终于整理出了自己想要的数据,下面就把数据保存起来吧。
04. 保存到文件
使用了投票人数作为加权分数
,默认认为投票越多,该女神越受关注,那么相应的分数也要高一些,这样可以避免女神们的分数很多都一样,不好排名的问题。最后文件的内容大概是这样的
04. 终极排名
群众的眼睛是雪亮的,球迷的眼睛那更不用说了。不过话说数据分析才是最最看功力的地方,这里我只是做了简单的处理,其他分析留待以后好好研究吧
不对啊,说好的女神照片呢
,哈哈哈,到生成的女神文件里点链接吧
https://github.com/zhouwei713/dqd_goddess