如何用Python触发Google Maps API点击事件并爬取经销商经纬度数据
爬取目标站点点位数据的两种可行方案
方案1:模拟交互触发点击事件
你之前用的requests_html只能完成初始页面的JS渲染,无法模拟用户交互行为,所以拿不到点击后的数据。可以改用支持浏览器自动化的工具(如Playwright、Selenium)模拟点击城市的操作,再提取渲染后的经纬度数据。
以Playwright为例,操作步骤如下:
- 安装依赖
pip install playwright playwright install chromium
- 示例代码
from playwright.sync_api import sync_playwright with sync_playwright() as p: # 启动无头浏览器 browser = p.chromium.launch(headless=True) page = browser.new_page() page.goto("http://ihe.istanbul/satis-noktalari") # 等待页面资源加载完成 page.wait_for_load_state("networkidle") # 替换为目标城市选择按钮的CSS选择器,可手动在浏览器F12元素面板中复制对应元素的选择器 page.click("替换为你要点击的城市元素的CSS选择器") # 等待地图点位数据渲染完成 page.wait_for_timeout(2000) # 提取对应script标签的内容 target_script = page.locator("script").nth(23).inner_text() print(target_script) browser.close()
方案2:直接提取全量点位数据(无需模拟点击)
绝大多数地图类站点的全量点位数据会在页面首次加载时就预加载到全局JS变量中,点击城市只是筛选渲染对应区域的点位,不需要额外请求接口。你可以直接执行JS代码提取全量数据,效率更高:
from playwright.sync_api import sync_playwright with sync_playwright() as p: browser = p.chromium.launch(headless=True) page = browser.new_page() page.goto("http://ihe.istanbul/satis-noktalari") page.wait_for_load_state("networkidle") # 可先在浏览器控制台排查存储点位的全局变量名,通常命名为markers、dealers、locations等 all_dealer_points = page.evaluate("window.替换为存储点位的全局变量名") print(all_dealer_points) browser.close()
如果找不到对应全局变量,直接用方案1模拟点击即可满足需求。
内容的提问来源于stack exchange,提问作者sukruburakcetin
相关产品推荐
相关产品推荐

