Python从网页读取数据

Python从网页读取数据,python,python-3.x,webpage,extraction,self-extracting,Python,Python 3.x,Webpage,Extraction,Self Extracting,我有一个IP地址列表。我想知道是否可以使用python通过从这个网站提取信息来确定IP地址的国家名称()。请看下面的截图。 e、 g:IPlist=[“100.43.90.10”,“125.7.8.9.9”] 这是我的代码:我知道我可以通过将实际url与后缀(=我的IP地址)连接起来来更改搜索url。我想得到“美国” 以下是“美国”所在地的屏幕截图: 导入urllib.request 使用urllib.request.urlopen('http://www.whatip.com/ip/100.

我有一个IP地址列表。我想知道是否可以使用python通过从这个网站提取信息来确定IP地址的国家名称()。请看下面的截图。 e、 g:IPlist=[“100.43.90.10”,“125.7.8.9.9”]

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

以下是“美国”所在地的屏幕截图:

导入urllib.request
使用urllib.request.urlopen('http://www.whatip.com/ip/100.43.90.10”)作为答复:
html=response.read()
打印(html)
text=html.decode()
开始=文本。查找(“国家:”)
我检查了源代码中只有一个“国家”。我知道我需要找到“国家”的索引,然后打印出“美国”,但我被卡住了。有人能告诉我怎么做吗?非常感谢

您可以使用此网站:

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

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

p、 一个月前我也做过类似的事情

您可以使用此网站:

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

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


p、 一个月前我也做过类似的事情

我建议使用一种可用的IP地理定位方法

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

我快速地玩了一下,它似乎工作得很好:

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}

我建议使用一种可用的IP地理定位方法

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

我快速地玩了一下,它似乎工作得很好:

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

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

您可以做得更好,而不必使用Python。有很多Linux命令行实用程序可以做到这一点。首先,您必须尝试一些方法,我建议使用urllib2和beautifulsoup:)python中有很多关于网页提取数据的教程:)您可以将IP附加到URL
http://www.whatip.com/ip/125.7.8.9
并通过这种方式找到地理位置。或者,您也可以尝试beautifulsoup,这将使web抓取更容易。或者使用API,如中的API,以获得更具编程性的方法。@MarkoMackic thx!我已经修改了我的问题,提供了迄今为止我的代码。但是我又被困在如何打印关键字后面显示的内容上了。@MarkoMackic:urllib2代表Python2,在Python3中被urllib.*代替。但我确实同意以下观点:-)您可以做得更好,而不必使用Python。有很多Linux命令行实用程序可以做到这一点。首先,您必须尝试一些方法,我建议使用urllib2和beautifulsoup:)python中有很多关于网页提取数据的教程:)您可以将IP附加到URL
http://www.whatip.com/ip/125.7.8.9
并通过这种方式找到地理位置。或者,您也可以尝试beautifulsoup,这将使web抓取更容易。或者使用API,如中的API,以获得更具编程性的方法。@MarkoMackic thx!我已经修改了我的问题,提供了迄今为止我的代码。但是我又被困在如何打印关键字后面显示的内容上了。@MarkoMackic:urllib2代表Python2,在Python3中被urllib.*代替。但我同意你的观点:-)谢谢!我已经编写了一些python代码并更新了问题。似乎我需要找到一种打印“美国”的方法。@yingnanliu你能做的是使用正则表达式搜索整个:
Country:US
,其中只有国家名称不同,其余的是固定的。找到后,只需使用另一个正则表达式即可获得国家名称的起始索引。这有用吗?谢谢!这正是我到目前为止所做的,但当我需要打印下一行的“美国”时,我陷入了下一步。你能看到我刚刚更新的代码吗?谢谢!我已经编写了一些python代码并更新了问题。看来我得想办法把“美国”印出来。@yingnanliu你能做什么