假如数据库现在有个人失信记录,身份证号,姓名等字段,现需要统计各省市区有多少失信记录,如何去思考和实现呢?
一.分析
我们知道,中国人的身份证号18位是有规律的,前6位记录和反映着一个人的地域情况.比如我身份证前6位371522,根据统计局全国行政区划代码表可以识别出我是山东省聊城市莘县人(见下图).
既然我们有身份证数据,生下来要做的就是把这个网站的数据抓取下来,当做一个地区字典表,通过身份证前6位和这个地区表去关联即可
二.页面分析
上图可以看出,这个网站是将省市区三级都放在了P标签 class='MsoNormal'下,p标签里面根据是否是省级单位,决定加不加b标签,加了b标签的说明是省一级单位,紧接着是二级单位 市级单位,再下面是区县单位.并且解析的话只能解析出编码字段和文本(省市区掺杂)
而我想处理的数据结果也正是这样的三级排列的结果,给你一个6位数的编码可以清楚的查到这个编码所匹配出来的省-市-区(县),类似下面这个图,如何实现呢?
三.建表分析
爬虫解析时候你会发现,这里页面上能解析出类似[130926','肃宁县']这样的列表,只是列表的第二个值是省市区掺杂的,因此我们,建表时候需要加上标识符,入库的这条记录是什么级别的(是省还是市还是区县?),并且编码前两位确定为省id,前4位为市id,初期我们建表如下(后续爬虫自动建表):
```
CREATE TABLE `dim_district` (
`id` int(11) NOT NULL AUTO_INCREMENT COMMENT '主键id',
`area` varchar(255) DEFAULT NULL comment '名称',
`pro_id` int(11) DEFAULT NULL COMMENT '省id',
`city_id` int(11) DEFAULT NULL COMMENT '市id',
`area_type` varchar(50) DEFAULT NULL COMMENT '省市区标识符',
PRIMARY KEY (`id`),
KEY `district_num` (`district_num`),
KEY `area` (`area`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
```
再这个表基础上,等有数据入表之后我们再添加省名称字段和市名称字段,并对着两个字段进行update操作(update部分也写在代码中)
四,爬虫及数据update
五,数据截图
六,git代码下载
https://github.com/chengcxy/spiders/blob/master/dim_district.py
领取专属 10元无门槛券
私享最新 技术干货