大数据告诉你,中国哪里出美女

来源:互联网 发布:检测电脑温度软件 编辑:程序博客网 时间:2024/05/01 13:54

前言 

      “自古美女出苏杭”,“川渝盛产美女”,究竟哪里才是中国最盛产美女的地方,为此,本文采用网页自动化抓取的方法,调取了中国大型偶像乐团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地处上海,来自上海的成员可能也有一定程度的地域优势,但基于网页信息的抓取和统计分析,就暂时不考虑此种因素。

2 0
原创粉丝点击