作者:阿宝 

更新:2016-08-31 

来源:彩色世界(https://blog.hz601.org/2016/08/31/taobao-ip-sniffer/index.html) 

简述

当初选择做这么一个项目,不是为了拷贝一份库自己做服务,也不是为了其他目的,只是单纯的熟悉关于http和mysql方面的知识。

下面言归正传。

淘宝IP地址库简介

此地址库可以根据用户提供的IP地址,快速查询出该IP地址所在的地理信息和地理相关的信息,包括国家、省、市和运营商。用户也可以主动提交信息来纠错。

主要优势表现为:

(1)地域

覆盖度:94.54% 精确到市级

准确度:96.5% 精确到市级

(2)运营商

覆盖度:93.8%

准确度:暂无统计数据

(3)查询速度

10qps

注:阿里同机房内网,实测速度为4qps左右。

(4)接口

符合REST规范,方便扩展;

使用JSON作为数据格式,方便使用;

基础数据结构

下面介绍一下,需要使用到的一些基础数据项,以及来源。

首先,我们来分析一下淘宝IP地址库的返回数据,

{
“code” : 0, // 请求成功/失败
"data" : {
“country” : “\u4e2d\u56fd”, // 国家
"country_id" : “CN”, // 国家代码
"area" : “\u534e\u5317”, // 地区
"area_id" : “100000”, // 地区代码
"region" : “\u5317\u4eac\u5e02”, // 省(自治区、直辖市、特别行政区)
“region_id” : “110000”, // 省代码
"city" : “\u5317\u4eac\u5e02”, // 市(地区、自治州、盟及国家直辖市所属市辖区和县)
“city_id” : “110000”, // 市代码
"county" : “”, // 县(市辖区、县级市、旗)
“county_id” : “-1”, // 县代码
"isp" : “\u4e2d\u56fd\u79d1\u6280\u7f51”, // 运营商
"isp_id" : “1000114”, // 运营商代码
"ip" : “210.75.225.254” // ipv4/ipv6
}
}

其中:

国家与国家代码,由联合国统计局统一制定。详见:http://zh.wikipedia.org/wiki/ISO_3166-1

地区、省、市、县以及相应的代码,由中华人民共和国国家统计局统一制定,详见:http://www.stats.gov.cn/tjsj/tjbz/xzqhdm/201401/t20140116_501070.html

运营商与运营商代码,由国际电联电信标准化部门统一制定,不过已经很久没有维护,不可用。到目前为止,本人也没有找到一份完整的编码表,希望知晓者告知。暂且就以淘宝IP地址库中编码为准。

国家IP地址段,由互联网IP地址分配中心统一管理,在此附上中文版的地址段信息,详见程默的博客,在此表示感谢:http://ipblock.chacuo.net/

数据库设计

数据项及命名

国家 country

地区 region

省(自治区、直辖市、特别行政区) province

市(地区、自治州、盟及国家直辖市所属市辖区和县) city

县(市辖区、县级市、旗) county

镇(乡、城镇) town

村(村庄) village

运营商 isp

IP ip

IP表

国家代码 2个字节 CHAR(2)

县代码 6位整形 UINT(20)

村代码 12位整形 UINT(40)

运营商代码 7位整形 UINT(24)

IP地址 4个字节 UINT(32)

国家表

二位字母 2个字节 CHAR(2)

三位字母 3个字节 CHAR(3)

三位数字 3位整形 UINT(10)

ISO英文用名 48个字节 CHAR(48)

中文用名 48个字节 CHAR(48)

地区表

代码 1位整形 UINT(4)

名称 4个字节 CHAR(4)

县(市辖区、县级市、旗)表

代码 6位整形 UINT(20)

名称 48个字节 CHAR(48)

村(村庄)表

代码 12位整形 UINT(40)

名称 48个字节 CHAR(48)

运营商表

代码 7位整形 UINT(24)

名称 48个字节 CHAR(48)

数据采集

IP运营商信息来源于各个运营商,IP所属地域信息来源于CNNIC,不过这些信息不太容易拿到完整的。

所以,此处就以淘宝IP地址库为来源。

实现方案

使用 nodejs + python 实现,nodejs主要实现网络交互集中的部分,python主要实现网页抓取。数据库使用常见的 mysql。

国家代码抓取

使用 python 实现从 http://zh.wikipedia.org/wiki/ISO_3166-1 地址抓取代码信息,并保存文本country.txt。当然,也可以直接手动拷贝粘贴到文本中。

使用 nodejs 按行读取上一步抓取到的文本,做处理,使用 node-mysql 写入数据库。

县代码抓取

使用 python 实现从 http://www.stats.gov.cn/tjsj/tjbz/xzqhdm/201401/t20140116_501070.html 地址抓取代码信息,并保存文本cncounty.txt。当然,也可以直接手动拷贝粘贴到文本中。

使用 nodejs 按行读取上一步抓取到的文本,做处理,使用 node-mysql 写入数据库。

国内IP段抓取

使用 python 实现从 http://ipblock.chacuo.net/ 地址抓取IP段信息,并保存文本cnip.txt。当然,也可以直接手动拷贝粘贴到文本中。

IP地址信息查询

使用 nodejs 读取 cnip.txt 文本,每次解析10000个IP,使用 http 模块从淘宝IP地址库查询结果,并使用 node-mysql 写入数据库。

由于在 nodejs 中 http 处理和 mysql 处理都是异步操作,所以,增加一个缓冲区,保存http请求结果。笔者使用了经典的生产者消费者模型来处理这个问题。

结果

为了保证请求的稳定,使用阿里云服务器运行此系统。

实际运行时,每秒可以稳定的请求到5个IP信息,中国目前(截止2014年1月)拥有3.3亿IP,完成全部请求大约需要2.98天。

完成全部存储,数据库大小为22.3GB。

淘宝IP地址库采集的更多相关文章

  1. 淘宝IP地址库采集器c#代码

    这篇文章主要介绍了淘宝IP地址库采集器c#代码,有需要的朋友可以参考一下. 最近做一个项目,功能类似于CNZZ站长统计功能,要求显示Ip所在的省份市区/提供商等信息.网上的Ip纯真数据库,下载下来一看 ...

  2. 淘宝IP地址库采集器c#

    个人原创.欢迎转载.转载请注明出处.http://www.cnblogs.com/zetee/articles/3482085.html 采集器概貌,如下: 最近做一个项目,功能类似于CNZZ站长统计 ...

  3. 用淘宝ip地址库查ip

    这是一个通过调用淘宝ip地址库实现ip地址查询的功能类 using System; using System.Collections.Generic; using System.Linq; using ...

  4. Delphi使用JSON解析调用淘宝IP地址库REST API 示例

    淘宝IP地址库:http://ip.taobao.com,里面有REST API 说明. Delphi XE 调试通过,关键代码如下: var IdHTTP: TIdHTTP; RequestURL: ...

  5. 淘宝IP地址库API接口(PHP)通过ip获取地址信息

    淘宝IP地址库网址:http://ip.taobao.com/ 提供的服务包括: 1. 根据用户提供的IP地址,快速查询出该IP地址所在的地理信息和地理相关的信息,包括国家.省.市和运营商. 2. 用 ...

  6. 淘宝IP地址库API地址

    淘宝IP地址库:http://ip.taobao.com/instructions.php   接口说明 1. 请求接口(GET): http://ip.taobao.com/service/getI ...

  7. WordPress使用淘宝IP地址库的API显示评论者的位置信息(二)

    1 淘宝IP地址库的接口说明 在上一篇文章<WordPress使用淘宝IP地址库的API显示评论者的位置信息(一)>中,vfhky使用了新浪工具提供的这个IP接口显示博客评论者的位置信息. ...

  8. 淘宝IP地址库

    淘宝官方ip地址库 http://ip.taobao.com/ 接口说明 1. 请求接口(GET): http://ip.taobao.com/service/getIpInfo.php?ip=[ip ...

  9. 淘宝ip地址库接口会导致TTFB时间变长,网站打开速度变慢

    前一段时间闲来无事发现别人的网站上有显示当前用户城市的功能,就自己也整了一个 这是淘宝ip地址库调用方法 然后问题就出现了,网站打开速度慢的要死 用F12发现是TTFB太慢,然后百度了,发现了问题的原 ...

随机推荐

  1. Mac之OS系统下搭建JavaEE环境 <五> 之Mysql数据库的安装及配置

    这里将推荐两款 集成的Mysql环境 十分轻便好用,MAMP 和 XAMPP MAMP XAMPP 1.MAMP下载 官网: https://www.mamp.info/en/ 下载安装即可使用 MA ...

  2. iOS内购(IAP)中的那些坑

    公司的公共库原来并没有这部分的代码,以前做内购是用两个比较有名的github上的第三方库.一个叫MKStoreKit,另一个叫IAPManager,我看了一下写的都很辣鸡,使用起来很不方便,而且写的还 ...

  3. 标准IO: 文件的打开与关闭函数 fopen & fclose

    (1) 流(stream)和文件(file)    流和文件 在Turbo C2.0中是有区别的, Turbo C2.0 为编程者和被访问的设备之间提供了一层抽象的东西, 称之为"流&quo ...

  4. solr6.3 + Hbase Indexer使用MR创建索引,错误Bad return type

    使用solr6.3 + Hbase Indexer ,通过Hbase-indexer从Hbase建立索引到solr中,进行全文搜索. 两种实现方式:① 开启hbase-indexer进行实时同步新数据 ...

  5. CentOS7的网卡启动不起来的问题

    这个问题在刚学Linux遇到的,centOS7的网卡启动不起来,导致建不了集群.如下图没有ifconf-env33网卡的IP 还有下面这个图>>> 如果你遇到了,呵呵呵,迷之微笑. ...

  6. 【Vue】详解Vue组件系统

    Vue渲染的两大基础方式 new 一个Vue的实例 这个我们一般会使用在挂载根节点这一初始化操作上: new Vue({ el: '#app' }) 注册组件并使用—— 全局注册 通过Vue.comp ...

  7. Spring Ioc-依赖注入的几种方式

    一 setter方法注入 配置文件如下: <bean id="helloAction" class="org.yoo.action.SpringSetterHell ...

  8. spring boot 配置文件application

    场景:在项目部署的过程中,对于spring boot的配置文件一直不很了解,直到项目出现一个莫名其妙的问题——工程classes中的配置文件被覆盖,程序启动总是报错! 1  配置文件的优先级 appl ...

  9. SpringBoot系列一(入门,ORM,Transaction,log4j2等)

    今天写篇springboot的博客,主要介绍一下springboot搭建以及一些整合. 首先介绍springboot搭建,我今天选择Maven,想用Gradle搭建的就自己百度一下吧,访问" ...

  10. IT软件管理人员的职业路线(从技术经理到总经理) - CEO之公司管理经验谈

    技术.业务和管理永远是工作的一个话题.笔者今天就根据自身的经验,通过这三个方面介绍下IT软件管理人员的职业路线.前面写过一个文(IT软件技术人员的职位路线(从程序员到技术总监) - 部门管理经验谈), ...