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

使用bs4解析HTML:提取无类/id的含经纬度p标签方法咨询

解决无class/id的经纬度p标签提取问题

嘿,我明白你现在的困境——要抓一个既没class又没id的p标签,还得精准定位到带经纬度的那个。别担心,咱们用BeautifulSoup结合两种思路就能搞定,我给你一步步拆解:

思路1:靠文本内容特征定位

经纬度的文本格式很有辨识度,要么带°、'这类符号,要么会明确出现“Latitude”“Longitude”关键词。咱们可以用正则表达式匹配这些特征,直接锁定目标p标签。

先修正你代码里的小问题(导入顺序和关闭连接的细节),再加上提取逻辑:

from urllib.request import urlopen
from bs4 import BeautifulSoup
import re

my_url = 'http://www.fortwiki.com/Battery_Adair'
uClient = urlopen(my_url)
page_html = uClient.read()
uClient.close()  # 记得关闭连接,避免资源占用

page_soup = BeautifulSoup(page_html, "html.parser")

# 用正则匹配包含经纬度特征的文本(度数符号、关键词都算)
lat_lon_pattern = re.compile(r'(Latitude|Longitude|°|\'|")')
target_p = page_soup.find('p', text=lat_lon_pattern)

if target_p:
    print("提取到的经纬度内容:", target_p.get_text(strip=True))
else:
    print("没找到目标p标签")

思路2:靠页面结构的位置关系定位

如果页面结构比较稳定,这个经纬度p标签大概率在“Location”这类标题的后面。咱们可以先找到对应的标题标签,再取它后面的第一个p标签:

# 先定位到包含"Location"的标题(比如h3)
location_title = page_soup.find('h3', string=lambda text: text and 'Location' in text)

if location_title:
    # 取标题后面紧邻的第一个p标签
    target_p = location_title.find_next('p')
    if target_p:
        print("提取到的经纬度内容:", target_p.get_text(strip=True))
    else:
        print("Location标题后面没有找到p标签")
else:
    print("没找到Location相关的标题")

这两种方法各有优势:正则法适合内容格式固定的场景,位置法适合页面结构稳定的情况,你可以根据实际页面情况选一个用~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 08:39:24