大数据告诉你,中国哪里出美女
2016-06-04 18:51
531 查看
前言
“自古美女出苏杭”,“川渝盛产美女”,究竟哪里才是中国最盛产美女的地方,为此,本文采用网页自动化抓取的方法,调取了中国大型偶像乐团SNH48的成员介绍,找到成员出生地一览进行汇总统计!概要
网页信息采集可以使用的工具众多,本次博主采用casperJS自动化采集的方式,采集了SNH48官网成员介绍页面。casperJS能够方便地实现网页截图,网页元素查找等方面的功能,特别值得一提的是其对于选择器的较好支持,能够基于选择器查找所需元素,这样就大大简化了提取关键信息的步骤,从而避免了以往数据采集通过正则表达式查找元素的麻烦。casperJS的简介及使用方法详见其官网:http://casperjs.org/步骤
1、登录SNH48官网的成员介绍主页:http://www.snh48.com/member_list.php;2、随意点击某一成员的信息主页,可以发现其URL格式形如:http://www.snh48.com/member_detail.php?sid=xxx
可以看到,sid后面的数字即为成员的编号;查看整个页面,可以发现其取值范围为1~150,但某些取值可能没有页面,即编号不连续,不过好在这个问题的存在不影响采集,稍后详细介绍。
3、查找成员的出生地,如下图所示红框所示
4、最关键一步,查找该出生地对应的选择器。
打开chrome,选择“检查”,再点击“元素选择器”并选中上面第3步的出生地元素,如下图所示:
可以看出,出生地放在了一个无序列表项li当中,该列表项的class名为12,且有多个同名的class,故不能采用li.12的形式定位。那么,我们向上寻找其父元素
看到其父元素为div,类名mem_w,为了验证类名为mem_w的div的唯一性,在chrome的console中输入:document.querySelectorAll(".mem_w"),如下图所示:
由此可见该元素具有唯一性,那么通过它再找到出生地对应的li即可找到元素,观察发现,显示出生地的li位于该div下的第22个元素,采用document.querySelectorAll(".mem_w li:nth-child(22)")验证,结果如下:
至此,我们就找到了网页采集的关键元素,从而可以编写采集代码了。
5、编写casperJS代码采集信息(拿走不谢):
var casper = require('casper').create(); var fs=require('fs'); casper.start(); fs.write("snh48.html",'<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">','a+') for (var i = 1; i <=180; i++) { (function (arg) { casper.then( function () { var url = "http://www.snh48.com/member_detail.php?sid=" + arg; casper.page = casper.newPage(); casper.open(url).then(function () { fs.write("snh48.html",arg,"a+"); if(casper.getHTML(".mem_w li:nth-child(22)")) { fs.write("snh48.html",casper.getHTML(".mem_w li:nth-child(22)")+"<br>",'a+'); } }); } ); })(i) } casper.run();
代码部分解读:
(1)引入fs模块用于将采集到的数据输出到文件,在写入数据前,为了避免出现乱码,需要给文件指定编码格式UTF-8;
(2)第6行起,引入闭包,否则for循环内采集的结果将永远是最后一个,即sid为180的网页。不熟悉闭包的同学,可以阅读相关书籍和文档。
6、其他
类似的,我们再次抓取SNH48姐妹团BEJ48(http://www.bej48.com/member.html)和GNZ48(http://www.gnz48.com/member/member_list.php)的数据,脚本仍然采用上述框架,只是URL和选择器需要重新调整,在此不再赘述。
结论
本次采集共获得了169个数据,汇总如下:省份 | 美女数量 |
上海 | 21 |
四川 | 19 |
广东 | 13 |
江苏 | 12 |
浙江 | 11 |
湖南 | 11 |
湖北 | 10 |
河南 | 9 |
福建 | 7 |
山东 | 7 |
重庆 | 6 |
辽宁 | 6 |
北京 | 5 |
陕西 | 4 |
安徽 | 4 |
贵州 | 4 |
云南 | 3 |
江西 | 3 |
黑龙江 | 2 |
台湾 | 2 |
海南 | 2 |
内蒙古 | 1 |
吉林 | 1 |
香港 | 1 |
河北 | 1 |
广西 | 1 |
甘肃 | 1 |
内蒙 | 1 |
天津 | 1 |
可以看出,SNH48成员多来自上海及周边,此外来自四川、湖南、湖北也为数不少,与传统意义上大家认同的盛产美女的地方基本保持一致。当然,由于SNH48地处上海,来自上海的成员可能也有一定程度的地域优势,但基于网页信息的抓取和统计分析,就暂时不考虑此种因素。
相关文章推荐
- kafka集群启动遇到LeaderNotAvailableException错误
- UVA253——骰子涂色(Cube painting)
- Hadoop集群应用于大数据分析优势和挑战
- 大数据的存储及运算
- POJ1804 Brainman (逆序对)
- 使用行为树(Behavior Tree)实现游戏AI
- Failed to lookup view... in views directory...
- Communications link failure
- [WFD][IOT]通过小米盒子连接电视,概率性卡在接受视频数据界面
- scala实现单词统计(hdfs上)
- git 首次使用以及error: failed to push some refs to ****问题的解决
- 内置的材质包含文件 .cginc
- UVA 10780 Again Prime? No Time(质因数分解)
- 体育竞技游戏的团队AI
- 大数据架构的典型方法和方式
- 在windows下安装scala出现错误:找不到或无法加载主类 scala.tools.nsc.MainGenericRunner
- 一、百度Iot第一印象
- 来自知乎的pthread_cond_wait为什么总是带着mutex
- 梯田AGAIN
- [Codeforces667A]Pouring Rain(数学,几何)