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

使用BeautifulSoup抓取经纬度值的代码故障排查求助

问题排查与解决方案

让我帮你一步步找出代码里的问题,然后给出修复后的版本:

代码里的核心问题

  • 未定义变量错误:你用了for item in info:循环,但info这个变量根本没被定义——你前面找元素的结果存在longitude_findall里了,变量名不匹配会直接抛出NameError。
  • 元素定位范围太宽:div.tab-content是页面里的大容器,包含很多无关内容,直接找这个容器再遍历效率低,而且容易找不到目标元素。
  • 未提取实际文本值:就算找到了目标span标签,你直接打印的是BeautifulSoup的Tag对象,不是经纬度的数值文本。
  • 未利用初始化的列表:你创建了Latitude和Longitude列表,但没有把提取到的值添加进去,最后没法保存结果。

修复后的代码

from bs4 import BeautifulSoup 
import requests 

headers = {'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/102.0.0.0 Safari/537.36'} 
latitude_list = [] 
longitude_list = [] 
url = 'http://www.geonames.org/5549030' 

# 发送请求并解析页面
r = requests.get(url, headers=headers) 
soup = BeautifulSoup(r.text, 'html.parser') 

# 直接定位到带有latitude和longitude类的span元素
latitude_tag = soup.find('span', class_='latitude')
longitude_tag = soup.find('span', class_='longitude')

# 提取文本并添加到列表(做非空判断避免报错)
if latitude_tag:
    latitude = latitude_tag.get_text(strip=True)
    latitude_list.append(latitude)
    print(f"纬度: {latitude}")

if longitude_tag:
    longitude = longitude_tag.get_text(strip=True)
    longitude_list.append(longitude)
    print(f"经度: {longitude}")

代码说明

  1. 修正了变量名不匹配的问题,改成直接定位目标元素(这个页面里只有一组经纬度,不需要find_all遍历)。
  2. 直接用class_='latitude'和class_='longitude'定位,比用title属性更精准,也符合页面的实际结构。
  3. 用get_text(strip=True)提取标签里的文本,同时去掉多余的空格和换行符。
  4. 添加了非空判断,避免因为页面结构变化导致找不到元素时抛出错误。
  5. 把提取到的值添加到对应的列表里,方便后续使用。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.27 21:17:45