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

如何用Python从含JS代码的网页文本中提取所有坐标值?

从网页JavaScript代码中提取坐标值的解决方案

核心思路

坐标值本质是带小数的数值,通常成对出现(纬度、经度),可以直接用正则表达式匹配符合格式的数值,无需深入解析JavaScript语法结构。

具体实现步骤

假设你已经通过requests和BeautifulSoup获取到网页内容,接下来按以下步骤操作:

1. 提取所有JavaScript代码块

先把页面中所有<script>标签的内容提取出来:

import requests
from bs4 import BeautifulSoup
import re

# 你已有的网页抓取代码
target_url = "你的目标网页URL"
resp = requests.get(target_url)
soup = BeautifulSoup(resp.text, "html.parser")

# 提取所有非空的script标签内容
script_blocks = [block.string for block in soup.find_all("script") if block.string]

2. 正则匹配坐标数值

用正则匹配符合坐标格式的数值(支持正负号、整数+小数结构):

# 匹配坐标的正则:可选负号 + 整数部分 + 小数点 + 小数部分
coord_regex = re.compile(r"-?\d+\.\d+")

# 收集所有匹配到的坐标
all_coordinates = []
for block in script_blocks:
    matches = coord_regex.findall(block)
    if matches:
        all_coordinates.extend(matches)

# 转换为浮点数(按需选择)
all_coordinates = [float(coord) for coord in all_coordinates]

3. 按需处理坐标对(可选)

如果坐标是按「纬度,经度」成对出现的,可以把列表按每两个元素分组:

# 分组为(lat, lon)元组
coord_pairs = [(all_coordinates[i], all_coordinates[i+1]) for i in range(0, len(all_coordinates), 2)]

优化与过滤

如果页面中存在其他带小数的数值(如价格、距离)导致误匹配,可以通过坐标的合法范围过滤:

filtered_coords = []
for num in all_coordinates:
    # 纬度范围:-90~90,经度范围:-180~180
    if (-90 <= num <= 90) or (-180 <= num <= 180):
        filtered_coords.append(num)

注意:如果网页坐标被加密(如字符串拼接、Base64编码),需要先分析对应JavaScript代码的解码逻辑,再针对性处理。

内容的提问来源于stack exchange,提问作者Shemavi beat.

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 14:50:31