censys 数据库地理信息自定义接口(python版)

公司内部的ip信息库覆盖面不是很够
导致日志处理的时候ip经常差不到
有人推荐,censys比较权威,
但是没有文档,而且接口不太好用,所以自己写了一个查ip的接口
首先
到官网逛了逛,censys特殊之处在于注册了才能用api
注册以后有Secret,API_ID,在查询时需要用到
百度了一下发现也没什么有用的教程,又看了看官方的介绍以及源码
得到了最初的版本

import censys
from censys import *
Secret=“”
API_ID=“”
self.api = censys.ipv4.CensysIPv4(api_id=self.API_ID, api_secret=self.Secret)
res = self.api.view(ip)
geo = res['location']

后来发现,这个库不是专业的地理信息库,这样查询很多ip的地址view不到。。
但是在网页上面却是可以显示地理信息的,想了想,准备直接用url发请求

import requests
url="https://www.censys.io/ipv4/%s"%ip
res = requests.get(url, auth=(API_ID, Secret))
s=res.content

也可以用urllib2

import urllib2
values ={
  "user":API_ID,"passwd":Secret}
jdata = json.dumps(values)
req = urllib2.Request(url, jdata)
response = urllib2.urlopen(req)
s=response.read()

两者差不太多吧,我用的是第一种
之后就是解析html了
上网找了找,发现神器bs4
搞了搞发现好方便,直接贴代码

from bs4 import BeautifulSoup
soup = BeautifulSoup(s, "html5lib")

这样html就被解析出来了,结合censys返回的html,可以解析出地理信息

b=soup.find_all("dl","dl-horizontal dl-hostbox")
if len(b) == 0:
    print "not found"
geo=b[0].find_all('dd')

接下来继续解析出所需各项

lat_long=geo[3].string.split(',')
country=geo[2].string.split(' ')

json_data = {
    "ip"    :           ip,
     "latitude":        float(lat_long[0]),
     "country":         str(country[0]),
     "country_code":    str(country[1][1:-1]),
     "longitude":       f
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值