学习使用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: 中国湖北武汉 移动