Python 从网页读取数据

Python reads data from webpages

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

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

这是 "United States" 所在位置的屏幕截图:

    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>")

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

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

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

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

p.s。我一个月前做过类似的事情!

我建议使用可用于 IP 地理定位的 many REST APIs 之一。

这不需要您安装任何新模块或执行任何网页抓取。请求 returns 一个 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}

我发现使用 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))