0

たくさんの IP アドレスのリストがあります。このWebサイト( http://www.whatip.com/ip-lookup )から情報を抽出することにより、Pythonを使用して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>")

ソースコードに「国」が1つしかないことを確認しました。「国」のインデックスを見つけてから「米国」を出力する必要があることは理解していますが、行き詰まりました。誰でも方法を教えてください。どうもありがとう!!

4

3 に答える 3

1

IP ジオロケーションに利用できる多くの REST APIのいずれかを使用することをお勧めします。

これには、新しいモジュールをインストールしたり、Web ページのスクレイピングを実行したりする必要はありません。要求は、組み込みモジュールを使用して解析し、すぐに Python 辞書を作成できるjsonオブジェクトを返します。

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 に答える
1

ほとんどの場合、Web ページをスクリーンスクレイピングするよりも API を使用する方が簡単です。ip-api.com を使用した 1 つのソリューションを次に示します。

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

このサイトを使用できます: http://whatismyipaddress.com/ip/

必要なのは、Python スクリプトを作成することだけです。Python スクリプトはurllib3ライブラリを利用します。このライブラリは、Web への接続を作成し、IP アドレスの配列を設定してそれらをループし、そのたびに上記のサイトに IP アドレスを追加するために使用されます。を使用して http 要求を作成します。urllib応答を受信したら、応答のプロパティを使用し.dataて応答データを取得できます。応答データを受信したら、単純な正規表現を使用して国フィールド名を検索し、国名を取得します。

urllib小さいドキュメントに目を通してください。そして、あなたは完了です!

ps私は1ヶ月前に同様のことをしました!

于 2016-03-30T15:39:41.310 に答える