python使用www.ip138.com作为解析对象 获取公网ip及ip所属地区

学习使用pyquery的用例:

# 此还需要优化(网站存在反爬虫机制,有时会失效)

import urllib
import urllib.parse
import urllib.request
from pyquery import PyQuery as pq


def get_myip():
    # ip138.com中使用iframe,这里先获得iframe中的src
    # 每年iframe中的地址会变,比如 2019.ip138.com 2022.ip138.com
    # 不增头信息,访问ip138.com失败
    # 这里用iphone7 的头
    headers = ("User-Agent",
               "Mozilla/5.0 (Linux;U;Android 2.3;en-us;Nexus One Build/FRF91)AppleWebKit/999+(KHTML, like Gecko)Version/4.0 Mobile Safari/999.9")
    # headers = {'User-Agent':'Mozilla/5.0 (Windows NT 6.1; WOW64; rv:23.0) Gecko/20100101 Firefox/23.0'}
    opener = urllib.request.build_opener()
    opener.addheaders = [headers]
    data = opener.open("https://ip138.com")
    # data = opener.open("http://ip138.com")
    doc = pq(data.read())

    # 获得 iframe 标签的 src 属性的值
    # 获得出来大概是这样 "//2022.ip138.com/"
    # 再去掉两头多余的 "/"  就获得到实际的显示地址了
    url = "http://" + doc('iframe').eq(0).attr('src').replace('/', '')
    # print(url)
    opener.close()

    # 获取ip地址
    opener = urllib.request.build_opener()
    opener.addheaders = [headers]
    data = opener.open(url)
    doc = pq(data.read().decode('utf8'))

    # 取得素有的 <a> 元素
    list1 = doc('body p a')

    return list1;

if __name__ == '__main__':
    lists = get_myip();
    # 取得第一个<a> 元素
    my_ip = lists.eq(0).text();
    ip_address = str(lists.eq(1)).split("来自:")[1];

    print("my_ip:",my_ip);
    print("ip_address:",ip_address)

运行结果:

my_ip: 117.151.77.3
ip_address: 中国湖北武汉 移动

猜你喜欢

转载自blog.csdn.net/weixin_43824829/article/details/127382806