Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1782945
  • 博文数量: 297
  • 博客积分: 285
  • 博客等级: 二等列兵
  • 技术积分: 3006
  • 用 户 组: 普通用户
  • 注册时间: 2010-03-06 22:04
个人简介

Linuxer, ex IBMer. GNU https://hmchzb19.github.io/

文章分类

全部博文(297)

文章存档

2020年(11)

2019年(15)

2018年(43)

2017年(79)

2016年(79)

2015年(58)

2014年(1)

2013年(8)

2012年(3)

分类: Python/Ruby

2016-12-24 14:13:11

1.  这是个已经shutdown的网站,曾经提供JSON IP and GeoIP REST API
2.  这个网站很不错,提供xml/json/csv的输出


点击(此处)折叠或打开

  1. root@kali:/usr/local/src/py/network# curl freegeoip.net/csv/123.161.***.***
  2. 123.161.***.***,CN,China,41,Henan,Zhengzhou,,Asia/Shanghai,34.68,113.53,0
  3. root@kali:/usr/local/src/py/network# curl freegeoip.net/xml/123.161.***.***
  4. <Response>
  5.     <IP>123.161.***.***</IP>
  6.     <CountryCode>CN</CountryCode>
  7.     <CountryName>China</CountryName>
  8.     <RegionCode>41</RegionCode>
  9.     <RegionName>Henan</RegionName>
  10.     <City>Zhengzhou</City>
  11.     <ZipCode></ZipCode>
  12.     <TimeZone>Asia/Shanghai</TimeZone>
  13.     <Latitude>34.6836</Latitude>
  14.     <Longitude>113.5325</Longitude>
  15.     <MetroCode>0</MetroCode>
  16. </Response>
  17. root@kali:/usr/local/src/py/network# curl -s freegeoip.net/json/123.161.***.*** |python3 -m json.tool
  18. {
  19.     "ip": "123.161.***.***",
  20.     "country_code": "CN",
  21.     "country_name": "China",
  22.     "region_code": "41",
  23.     "region_name": "Henan",
  24.     "city": "Zhengzhou",
  25.     "zip_code": "",
  26.     "time_zone": "Asia/Shanghai",
  27.     "latitude": 34.6836,
  28.     "longitude": 113.5325,
  29.     "metro_code": 0
  30. }
3. 这个网站给我的感觉是速度比较快的,也是提供返回格式最多的


如果仔细比较这上两个网站,你会发现ip-api.com 的输出内容会多一些,多输出3个column, 其中一个as, 这个应该是BGP路由协议的自治域。

点击(此处)折叠或打开

  1. root@kali:/usr/local/src/py/network/scraper# curl -s http://ip-api.com/xml/123.161.***.***
  2. <?xml version="1.0" encoding="UTF-8"?>
  3. <query>
  4.     <status><![CDATA[success]]></status>
  5.     <country><![CDATA[China]]></country>
  6.     <countryCode><![CDATA[CN]]></countryCode>
  7.     <region><![CDATA[41]]></region>
  8.     <regionName><![CDATA[Henan]]></regionName>
  9.     <city><![CDATA[Luohe]]></city>
  10.     <zip><![CDATA[]]></zip>
  11.     <lat><![CDATA[33.5717]]></lat>
  12.     <lon><![CDATA[114.0353]]></lon>
  13.     <timezone><![CDATA[Asia/Shanghai]]></timezone>
  14.     <isp><![CDATA[China Telecom Henan]]></isp>
  15.     <org><![CDATA[China Telecom Henan]]></org>
  16.     <as><![CDATA[AS4134 Chinanet]]></as>
  17.     <query><![CDATA[123.161.***.***]]></query>
  18. </query>root@kali:/usr/local/src/py/network/scraper# curl -s http://ip-api.com/csv/123.161.***.***
  19. success,China,CN,41,Henan,Luohe,,33.5717,114.0353,Asia/Shanghai,"China Telecom Henan","China Telecom Henan","AS4134 Chinanet",123.161.***.***
  20. root@kali:/usr/local/src/py/network/scraper# curl -s http://ip-api.com/json/123.161.***.***
  21. {"as":"AS4134 Chinanet","city":"Luohe","country":"China","countryCode":"CN","isp":"China Telecom Henan","lat":33.5717,"lon":114.0353,"org":"China Telecom Henan","query":"123.161.***.***","region":"41","regionName":"Henan","status":"success","timezone":"Asia/Shanghai","zip":""}root@kali:/usr/local/src/py/network/scraper#
  22. root@kali:/usr/local/src/py/network/scraper# curl -s http://ip-api.com/json/123.161.212.211 |python3 -m json.tool
  23. {
  24.     "as": "AS4134 Chinanet",
  25.     "city": "Luohe",
  26.     "country": "China",
  27.     "countryCode": "CN",
  28.     "isp": "China Telecom Henan",
  29.     "lat": 33.5717,
  30.     "lon": 114.0353,
  31.     "org": "China Telecom Henan",
  32.     "query": "123.161.212.211",
  33.     "region": "41",
  34.     "regionName": "Henan",
  35.     "status": "success",
  36.     "timezone": "Asia/Shanghai",
  37.     "zip": ""
  38. }

4.  这个网站比较一般,没什么特色而且很不规范。我写了个代码来parse这些信息,才发现其坑人的地方,
里面的span用法统一,输出的text除了第一个以外都放在span标签内,而一个是把text放在下面。


点击(此处)折叠或打开

  1. import requests
  2. from bs4 import BeautifulSoup 
  3. from lxml.etree import HTML
  4. url="en/?ip="
  5. ipaddr="123.161.***.***"

  6. response=requests.get(url+ipaddr)
  7. #print(response.content)
  8. soup=BeautifulSoup(response.content,'lxml')
  9. #print(soup.prettify())

  10. contents=soup.find_all('div',class_='data-item')
  11. d={}
  12. key=contents[0].span.text.strip()
  13. value=contents[0].td.text.strip()
  14. d[key]=value
  15. for i in contents[1:]:
  16.     key=i.span.text.strip()
  17.     value=i.span.find_next().get_text().strip()
  18.     d[key]=value

  19. for key in d:
  20.     print(key,d[key])

另外推荐这篇文章: 

IP Address lookups using Python

http://tech.marksblogg.com/ip-address-lookups-in-python.html

阅读(1505) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~