You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用XPath提取talosintelligence网站IP位置数据返回空列表如何解决

问题原因

你返回空列表的核心原因是Talos Intelligence的IP查询结果是前端JavaScript异步加载渲染的,你用requests直接请求拿到的只是页面初始骨架HTML,里面根本不存在id="location-data-wrapper"的DOM节点,自然匹配不到任何内容。你可以自行打印page.text搜索对应节点关键词验证,初始返回内容里完全没有位置相关的渲染结果。

解决方法

方法1:直接调用后端数据接口(推荐,性能高无额外浏览器依赖)

Talos前端渲染用的位置数据是从固定接口拉取的,你可以直接构造请求调用接口拿结构化数据,不需要解析HTML:

import requests

ip = "198.86.225.18"
# 必须带合法请求头,否则会被反爬拦截
headers = {
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/125.0.0.0 Safari/537.36",
    "Referer": f"https://talosintelligence.com/reputation_center/lookup?search={ip}"
}
resp = requests.get(
    f"https://talosintelligence.com/api/v2/reputation/ip/{ip}",
    headers=headers
)
data = resp.json()
# 从结构化返回值中提取位置字段
location = f"{data['location']['city']}, {data['location']['country']}"
print(location)

运行后即可输出预期结果Charlotte, United States。

方法2:使用无头浏览器渲染页面后解析

如果你需要直接解析渲染完成的前端DOM,可以用无头浏览器工具模拟真实用户加载完所有JS资源后再提取元素,该方法性能较低,需要额外安装浏览器依赖:

# 前置依赖安装:pip install playwright && playwright install chromium
from playwright.sync_api import sync_playwright
from lxml import html

ip = "198.86.225.18"
with sync_playwright() as p:
    browser = p.chromium.launch(headless=True)
    page = browser.new_page()
    page.goto(f"https://talosintelligence.com/reputation_center/lookup?search={ip}")
    # 等待位置模块加载完成再取页面内容
    page.wait_for_selector("#location-data-wrapper td")
    tree = html.fromstring(page.content())
    talosiploc = tree.xpath('//*[@id="location-data-wrapper"]/table/tr/td/text()')
    # 过滤空白字符后拼接位置
    talosiploc = [i.strip() for i in talosiploc if i.strip()]
    print(f"{talosiploc[0]}, {talosiploc[-1]}")
    browser.close()

注意:请求时请控制访问频率,使用真实浏览器特征的请求头,避免被站点反爬策略封禁。

内容的提问来源于stack exchange,提问作者pynoob

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.29 08:18:27