0

我有一堆 IP 地址的列表。我想知道是否可以使用 python 通过从该网站(http://www.whatip.com/ip-lookup)中提取信息来确定 IP 地址的国家名称。请看下面的截图。例如:IPlist = ["100.43.90.10","125.7.8.9.9"]

这是我的代码:我知道我可以通过将实际 url 与后缀(=我的 IP 地址)连接来更改搜索 url。我想得到“美国”

这是“美国”所在位置的屏幕截图: 在此处输入图像描述

    import urllib.request
    with urllib.request.urlopen('http://www.whatip.com/ip/100.43.90.10') as response:
        html = response.read()
        print (html)
        text = html.decode()                

        start = text.find("<td>Country:</td>")

我检查了源代码中只有一个“国家”。我知道我需要找到“国家”的索引,然后打印出“美国”,但我卡住了。有人请告诉我该怎么做吗?非常感谢!!

4

3 回答 3

1

你可以使用这个网站:http ://whatismyipaddress.com/ip/

您需要做的就是编写一个 Python 脚本。Python 脚本将使用该urllib3库。该库用于创建到 Web 的连接,设置 IP 地址数组并循环访问它们,每次都将 IP 地址附加到上述给定站点。使用 创建一个http请求urllib,一旦收到响应,就可以使用 response 的.data属性来获取响应数据。收到响应数据后,使用简单的正则表达式查找国家/地区字段名称,然后获取国家/地区名称。

只需浏览urllib文档,它很小!你就完成了!

ps 我一个月前做过类似的事情!

于 2016-03-30T15:39:41.310 回答
1

我发现使用 API 几乎总是比截屏网页更容易。这是使用 ip-api.com 的一种解决方案:

import requests
import json

IPlist = ["100.43.90.10","125.7.8.9.9"]

request = json.dumps([{'query':ip, 'fields':'country'} for ip in IPlist])
response = requests.post('http://ip-api.com/batch', data=request).json()

print '\n'.join('{}: {}'.format(ip, data.get('country', 'Unknown'))
                for ip, data in zip(IPlist, response))
于 2016-03-30T16:19:02.340 回答
1

我建议使用可用于 IP 地理定位的众多 REST API之一。

这不需要您安装任何新模块或执行任何网页抓取。该请求返回一个json对象,您可以使用内置模块解析并立即创建一个 python 字典。

我快速玩了一下 nekudo,它似乎运作良好:

import json
from http import client

# Connect to the client
conn = client.HTTPConnection("geoip.nekudo.com")

# Make the request and extract the data
conn.request("GET","/api/172.217.3.110/full")
json_data = conn.getresponse().read().decode()

# Convert the JSON to a Python object
data = json.loads(json_data)

data现在是一个 Python 字典,包含您需要的所有信息

>>> data['registered_country']['names']['en']
'United States'

>>> data['location']
{'latitude': 37.4192, 'metro_code': 807, 'time_zone': 'America/Los_Angeles', 'longitude': -122.0574}
于 2016-03-30T16:12:56.627 回答