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

使用BeautifulSoup爬取谷歌地图舞蹈工作室数据遇TypeError问题求助

问题解决与实现方案

1. 直接报错原因修复

你的报错核心是拼写错误:BeautifulSoup中批量查找元素的方法是find_all(),而非findall()。但即便修正这个问题,你依然无法获取有效数据——谷歌地图的搜索结果是通过JavaScript动态渲染的,requests只能抓取静态HTML源码,无法加载JS生成的实际内容,同时谷歌会拦截无合法请求头的爬虫请求。

2. 完整实现方案(处理动态内容)

要正确爬取谷歌地图数据,需模拟浏览器行为加载动态内容,这里使用Selenium配合ChromeDriver实现:

步骤1:安装依赖

pip install selenium pandas

同时需下载对应Chrome版本的ChromeDriver,将其放置在Python可执行路径下,或在代码中指定路径。

步骤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
import pandas as pd
import time

# 初始化浏览器(若ChromeDriver不在默认路径,需添加executable_path参数指定路径)
driver = webdriver.Chrome()
driver.get("https://www.google.com/maps/search/dance+studio")

# 等待页面加载并滚动加载更多结果(模拟用户浏览行为)
time.sleep(3)
for _ in range(3):
    driver.execute_script("window.scrollTo(0, document.body.scrollHeight);")
    time.sleep(2)

# 等待结果元素加载完成
wait = WebDriverWait(driver, 10)
results = wait.until(EC.presence_of_all_elements_located((By.CLASS_NAME, "Nv2PK")))

locations = []
websites = []

for result in results:
    # 提取地址信息
    try:
        location = result.find_element(By.CLASS_NAME, "W4Efsd").text.split("·")[-1].strip()
    except Exception:
        location = ""
    locations.append(location)
    
    # 提取网站信息(需点击展开详情页)
    try:
        result.click()
        time.sleep(1)
        website_elem = wait.until(EC.presence_of_element_located((By.CLASS_NAME, "CsEnBe")))
        website = website_elem.get_attribute("href")
    except Exception:
        website = ""
    websites.append(website)

# 构建DataFrame并导出CSV
data = {
    "Location": locations,
    "Website": websites,
    "Email": [""] * len(locations),  # 谷歌地图不直接展示邮箱,需额外逻辑提取或商家未公开
    "Social Media": [""] * len(locations)
}
df = pd.DataFrame(data)
df.to_csv("dance_studio.csv", index=False)

# 关闭浏览器
driver.quit()

3. 关键注意事项

  • 页面结构变更:谷歌地图会频繁更新页面元素的类名与结构,若代码失效,需根据当前页面的HTML结构调整元素选择器。
  • 反爬限制:添加time.sleep()控制请求速率,避免触发谷歌的反爬拦截;若出现验证页面,需手动完成验证或调整请求策略。
  • 邮箱/社交媒体:谷歌地图默认不展示商家邮箱与社交媒体链接,部分商家需进入详情页后进一步提取,且并非所有商家都会公开此类信息。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 13:24:57