In [1]:
import json
import re
import chardet
import requests
In [2]:
def get_text_from_html(url):
"""
獲取網(wǎng)頁內(nèi)容,匹配有地址的文本
:param url: 獲取地址的url
:return: 返回包含地址的網(wǎng)頁內(nèi)容
"""
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.71 Safari/537.36'
}
resp = requests.get(url, headers=headers)
content = resp.text
prefix_ip = 'var ip_result = '
for row in re.split('\\r\\n\\t', content):
if prefix_ip in row and row:
return row
In [3]:
ip = '180.97.125.228'
url = 'https://www.ip138.com/iplookup.asp?ip=%s&action=1' % ip
row = get_text_from_html(url)
row
Out [3]:
'\\t\\tvar ip_result = {"ASN1éê?μ?":"?\\xad??ê?????êD μ?D? ", "iP??":"180.97.107.0 - 180.97.135.255", "??èYIPv6μ??·":"::B461:7DE4", "ó3é?IPv6μ??·":"::FFFF:B461:7DE4", "ip_c_list":[{"begin":3026283264, "end":3026290687, "ct":"?D1ú", "prov":"?\\xad??ê?", "city":"????êD", "area":"", "idc":"", "yunyin":"μ?D?", "net":""}], "zg":1};'
In [4]:
# 這個(gè)網(wǎng)頁文字的編碼是unicode形式的gbk編碼內(nèi)容
# Unicode codepoints U+0000 to U+00FF和latin-1一一對(duì)應(yīng),編碼后保留了等價(jià)的字節(jié)流數(shù)據(jù)。
row_byte = row.encode("latin-1")
row_byte
Out [4]:
b'\\t\\tvar ip_result = {"ASN\\xb9\\xe9\\xca\\xf4\\xb5\\xd8":"\\xbd\\xad\\xcb\\xd5\\xca\\xa1\\xc4\\xcf\\xbe\\xa9\\xca\\xd0 \\xb5\\xe7\\xd0\\xc5 ", "iP\\xb6\\xce":"180.97.107.0 - 180.97.135.255", "\\xbc\\xe6\\xc8\\xddIPv6\\xb5\\xd8\\xd6\\xb7":"::B461:7DE4", "\\xd3\\xb3\\xc9\\xe4IPv6\\xb5\\xd8\\xd6\\xb7":"::FFFF:B461:7DE4", "ip_c_list":[{"begin":3026283264, "end":3026290687, "ct":"\\xd6\\xd0\\xb9\\xfa", "prov":"\\xbd\\xad\\xcb\\xd5\\xca\\xa1", "city":"\\xc4\\xcf\\xbe\\xa9\\xca\\xd0", "area":"", "idc":"", "yunyin":"\\xb5\\xe7\\xd0\\xc5", "net":""}], "zg":1};'
In [5]:
# 通過字節(jié)碼獲取當(dāng)前的編碼為gb2312
encoding_detect = chardet.detect(row_byte)
encoding_detect
Out [5]:
{'encoding': 'GB2312', 'confidence': 0.99, 'language': 'Chinese'}
In [6]:
# 因此對(duì)其進(jìn)行解碼即可還原最初的unicode字符。
row_target = row_byte.decode("gb2312")
row_target
Out [6]:
'\\t\\tvar ip_result = {"ASN歸屬地":"江蘇省南京市 電信 ", "iP段":"180.97.107.0 - 180.97.135.255", "兼容IPv6地址":"::B461:7DE4", "映射IPv6地址":"::FFFF:B461:7DE4", "ip_c_list":[{"begin":3026283264, "end":3026290687, "ct":"中國(guó)", "prov":"江蘇省", "city":"南京市", "area":"", "idc":"", "yunyin":"電信", "net":""}], "zg":1};'
In [7]:
# 截取文本,轉(zhuǎn)化為規(guī)范的json字符串
json_str = row_target.strip().replace('var ip_result = ', '').replace(';', '')
json_str
Out [7]:
'{"ASN歸屬地":"江蘇省南京市 電信 ", "iP段":"180.97.107.0 - 180.97.135.255", "兼容IPv6地址":"::B461:7DE4", "映射IPv6地址":"::FFFF:B461:7DE4", "ip_c_list":[{"begin":3026283264, "end":3026290687, "ct":"中國(guó)", "prov":"江蘇省", "city":"南京市", "area":"", "idc":"", "yunyin":"電信", "net":""}], "zg":1}'
In [8]:
# 轉(zhuǎn)化為python里面的數(shù)據(jù)格式:字典
location_dict = json.loads(json_str)
location_dict
Out [8]:
{'ASN歸屬地': '江蘇省南京市 電信 ',
'iP段': '180.97.107.0 - 180.97.135.255',
'兼容IPv6地址': '::B461:7DE4',
'映射IPv6地址': '::FFFF:B461:7DE4',
'ip_c_list': [{'begin': 3026283264,
'end': 3026290687,
'ct': '中國(guó)',
'prov': '江蘇省',
'city': '南京市',
'area': '',
'idc': '',
'yunyin': '電信',
'net': ''}],
'zg': 1}
In [9]:
# 獲取中文地址
location = location_dict.get('ASN歸屬地', '').strip()
location
Out [9]:
'江蘇省南京市 電信'
聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。
舉報(bào)投訴
-
網(wǎng)頁
+關(guān)注
關(guān)注
0文章
73瀏覽量
19317 -
地址
+關(guān)注
關(guān)注
1文章
32瀏覽量
10765 -
文本
+關(guān)注
關(guān)注
0文章
118瀏覽量
17086
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
如何利用python和API查詢IP地址?
在Python中,直接查詢IP地址的地理位置或詳細(xì)信息(如所屬國(guó)家、城市等)通常需要依賴外部API服務(wù),因?yàn)镻ython標(biāo)準(zhǔn)庫(kù)本身不提供直接查詢IP地址地理位置的功能。以下是一個(gè)使用r
發(fā)表于 08-28 11:55
SIM5320如何用AT指令查詢SERVER自身IP地址?
想要用兩個(gè)SIM5320模塊之間點(diǎn)對(duì)點(diǎn)互傳數(shù)據(jù),現(xiàn)在已經(jīng)實(shí)現(xiàn)把其中一個(gè)配置為Server,另一個(gè)配置為Client,但是不知道如何查詢Server的IP地址,還望高人指點(diǎn)! 附手冊(cè)上配置SERVER的指令如下:(里面缺少查詢IP
發(fā)表于 04-03 21:43
請(qǐng)問長(zhǎng)短地址如何互相查詢?
本帖最后由 一只耳朵怪 于 2018-5-24 11:07 編輯
如題,請(qǐng)問TI大牛:1. 知道短地址Node ID如何查詢IEEE ID?2. 知道IEEE ID 如何查詢短地址
發(fā)表于 05-22 08:44
網(wǎng)線連接控制器的ip地址查詢
pc和一款控制器通過網(wǎng)線連接,arp-a命令查詢不到局域網(wǎng)內(nèi)有控制器的ip,請(qǐng)問有沒有什么方法可以查詢到控制器的ip地址?
發(fā)表于 06-18 10:53
如何查詢uboot下載執(zhí)行地址?
的 Uboot 映像:fip.bin、fip.s32請(qǐng)問:有什么我沒有用這種方式設(shè)置的嗎?問題二、查詢uboot下載執(zhí)行地址查看Uboot的下載和執(zhí)行地址可參考7.3下載S32G中的Uboot鏡像_燒錄工具
發(fā)表于 03-24 07:46
Modbus從設(shè)備如何回應(yīng)主機(jī)的消息及VB的小問題?
Modbus從設(shè)備如何回應(yīng)主機(jī)的消息?就是如何主機(jī)發(fā)往從設(shè)備要求查詢地址4001地址的數(shù)據(jù),從設(shè)備如何獲得那個(gè)數(shù)據(jù)呢?
用RTU模式傳輸,用VB的話如何控制3.5和1.5字符的間隔?
是個(gè)新手,請(qǐng)盡量說的詳細(xì)點(diǎn),拜托各位大蝦了~
發(fā)表于 05-05 16:10
dns地址如何查詢
DNS(Domain Name Server,域名服務(wù)器)是進(jìn)行域名(domain name)和與之相對(duì)應(yīng)的IP地址 (IP address)轉(zhuǎn)換的服務(wù)器。DNS中保存了一張域名(domain name)和與之相對(duì)應(yīng)的IP地址 (IP address)的表,以解析消息的域
發(fā)表于 01-15 16:09
?1315次閱讀
如何利用地址來查詢比特幣交易
由于比特幣的數(shù)據(jù)存儲(chǔ)結(jié)構(gòu),不可能直接利用比特幣的原始API來查詢指定地址的歷史交易數(shù)據(jù)。
發(fā)表于 07-26 17:00
?6507次閱讀
植入芯片發(fā)力 深圳犬只未植入芯片將被視為無證養(yǎng)犬
26日,深圳市城市管理和綜合執(zhí)法局公布了全市首批100家犬只芯片免費(fèi)注射點(diǎn),市民可在美麗深圳微信公眾號(hào)上查詢地址。2020年年底前,深圳將實(shí)現(xiàn)犬只芯片管理全覆蓋。(據(jù)《深圳市犬只電子標(biāo)簽植入管理規(guī)定
根據(jù)ip地址查網(wǎng)頁怎么查詢?
一、通過命令提示符查詢查網(wǎng)頁(Windows系統(tǒng)) ①按“Win+R”鍵,打開運(yùn)營(yíng)窗口。 根據(jù)ip地址查網(wǎng)頁怎么查詢? ②輸入“cmd”+“回車”,打開命令提示符窗口。 ③輸入“nslookup
這些ipv6公網(wǎng)地址查詢方法,一定要知道!
ipv6公網(wǎng)地址查詢可通過多種方法實(shí)現(xiàn),包括使用命令行工具(如Windows的ipconfig、Linux和macOS的ifconfig或ipaddrshow),利用在線查詢網(wǎng)站和瀏覽器插件,登錄
NAT技術(shù)為什么會(huì)對(duì)IP地址查詢造成干擾
對(duì)于企業(yè)來說,對(duì)IP地址進(jìn)行查詢https://www.ip66.net/?utm-source=WZJ&utm-keyword=?2835肯定是越細(xì)致越好,信息的維度要豐富精準(zhǔn),這樣才有
為什么說行業(yè)監(jiān)管離不開IP地址查詢
行業(yè)監(jiān)管離不開IP地址查詢,這一大背景是互聯(lián)網(wǎng)發(fā)展迅速,互聯(lián)網(wǎng)行為日益頻繁復(fù)雜。 行業(yè)種類有很多,比如網(wǎng)絡(luò)安全會(huì)利用IP地址查詢來追蹤和防范網(wǎng)絡(luò)攻擊、內(nèi)容相關(guān)追蹤、電商等等、現(xiàn)在很多a
評(píng)論