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

如何用Python获取网站地图导航容器数据?现有代码返回NO DATA求助

解决动态页面爬取壁画数据的问题

我正在学习Python,希望从指定网站的地图导航容器中获取壁画ID、纬度、经度、艺术家姓名、地址、城市和州等信息。以下是我尝试过的代码,但输出始终为NO DATA,恳请各位提供帮助!

from bs4 import BeautifulSoup
import requests

url = 'https://findmasa.com/view/map#b1cc410b'
response = requests.get(url)
soup = BeautifulSoup(response.content, 'html.parser')

li_element = soup.find('li', id='b1cc410b')

if li_element:
    data_lat = li_element['data-lat']
    data_lng = li_element['data-lng']
    artist_name = li_element.find('a').text
    address = li_element.find_all('p')[1].text
    city = li_element.find_all('p')[2].text

    print('LATITUDE ', data_lat)
    print('LONGITUDE ', data_lng)
    print('ARTIST ', artist_name)
    print('ADDRESS ', address)
    print('CITY ', city)
else:
    print('NO DATA')

问题原因

你用requests获取的是静态HTML内容,但该网站的地图数据是通过JavaScript动态渲染加载的,静态HTML里并没有你要找的li#b1cc410b元素,所以BeautifulSoup无法定位到目标节点,最终输出NO DATA。

解决方案

使用Selenium模拟浏览器加载页面,它会等待JavaScript执行完成,获取到动态渲染后的完整页面内容。

步骤

  1. 安装Selenium库和对应浏览器的驱动(比如ChromeDriver)
  2. 编写代码模拟浏览器访问页面,等待元素加载后提取数据

示例代码

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

url = 'https://findmasa.com/view/map#b1cc410b'

# 初始化Chrome浏览器(需提前安装ChromeDriver并配置环境变量)
driver = webdriver.Chrome()
driver.get(url)

try:
    # 等待目标li元素加载完成,最多等待10秒
    li_element = WebDriverWait(driver, 10).until(
        EC.presence_of_element_located((By.ID, 'b1cc410b'))
    )

    # 提取所需数据
    mural_id = li_element.get_attribute('id')
    data_lat = li_element.get_attribute('data-lat')
    data_lng = li_element.get_attribute('data-lng')
    artist_name = li_element.find_element(By.TAG_NAME, 'a').text
    paragraphs = li_element.find_elements(By.TAG_NAME, 'p')
    address = paragraphs[1].text
    city_state = paragraphs[2].text
    city, state = city_state.split(', ')

    # 输出结果
    print('壁画ID ', mural_id)
    print('纬度 ', data_lat)
    print('经度 ', data_lng)
    print('艺术家 ', artist_name)
    print('地址 ', address)
    print('城市 ', city)
    print('州 ', state)

finally:
    # 关闭浏览器
    driver.quit()

补充说明

  • 若使用Firefox等其他浏览器,需替换为对应驱动(如GeckoDriver)和初始化代码(webdriver.Firefox())
  • 确保驱动版本与浏览器版本匹配,避免兼容性问题
  • 也可尝试分析网站的XHR网络请求,直接调用后端API获取数据,这种方式更高效,但需要自行定位数据接口

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 00:10:15