2016-03-30 7 views
0

У меня есть список связок IP-адресов. Мне интересно, можно ли использовать python для определения имени страны IP-адресов, извлекая информацию с этого сайта (http://www.whatip.com/ip-lookup). См. Снимок экрана ниже. например: IPlist = ["100.43.90.10", "125.7.8.9.9"]Python считывает данные с веб-страниц

Это мой код: Я понимаю, что могу изменить поисковый URL, объединив фактический url с суффиксом (= мой IP-адрес). И я хочу, чтобы «Соединенные Штаты Америки»

Вот скриншот того, где находится «Соединенные Штаты Америки»: enter image description here

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

Я проверил есть только одна «страна» в исходном коде. Я понимаю, что мне нужно найти индекс «Страна», а затем распечатать «Соединенные Штаты», но я застрял. Кто-нибудь плз скажет мне, как это сделать? Большое спасибо!!

+0

Вы можете сделать один лучше и не использовать Python вообще. Для этого нужны утилиты командной строки Linux. –

+0

Сначала вам нужно попробовать что-то, я предлагаю использовать urllib2 и beautifulsoup :) есть много учебников по извлечению веб-страниц в python :) –

+0

Вы можете добавить IP-адрес к URL-адресу 'http://www.whatip.com/ip/125.7.8.9' и найти геолокацию таким образом. Кроме того, вы можете попробовать beautifulsoup, который облегчит веб-очистку. Или используйте API, например, один из http://ip-api.com/ для более программного подхода. –

ответ

1

Я бы предложил использовать один из many REST APIs, доступный для геолокации IP.

Это не требует установки каких-либо новых модулей или очистки любой веб-страницы. Запрос возвращает объект 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} 
1

Вы можете использовать этот сайт: http://whatismyipaddress.com/ip/

Все, что вам нужно сделать, это написать скрипт на Python. В скрипте Python будет использоваться библиотека urllib3. Эта библиотека используется для создания подключений к сети, настройки массива IP-адресов и их циклического перехода, каждый раз добавляя IP-адрес к указанному выше сайту. Создайте http-запрос, используя urllib, после получения ответа вы можете использовать свойство ответа .data для получения данных ответа. После получения данных ответа используйте простое регулярное выражение для определения имени поля страны, а затем просто возьмите имя страны.

Пройдите через документацию urllib, которая небольшая! и вы сделали !

p.s. Я сделал подобную вещь месяц назад!

+0

thx! Я сделал несколько кодов python и получил вопрос обновлен. Похоже, мне нужно выяснить, как напечатать «Соединенные Штаты». –

+0

@yingnanliu, что вы можете сделать, это найти все: ' Страны: <тд класса =«синего»> США' с использованием регулярных выражений, где только название страны будет меняться, а остальное фиксирован. после того как вы нашли, просто используйте другое регулярное выражение, чтобы получить начальный указатель названия страны. Помогает ли это? – DebashisDeb

+0

thx! Это именно то, что я сделал до сих пор, но я застрял на следующем этапе, когда мне нужно распечатать «Соединенные Штаты», находящиеся в следующей строке. Вы могли бы увидеть код, который я только что обновил? –

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)) 
+0

thx много !!! Это быстрее! –

+0

Пожалуйста, прочтите и соблюдайте правила использования ip-api.com (как и любой веб-сервис). Пожалуйста, обратите внимание на немедленный запрет на нарушение ограничений на объем трафика, и как отменить запрет. –

+0

thx для головы! –

 Смежные вопросы

  • Нет связанных вопросов^_^