如何使用Python爬取Canvas地图鼠标悬停才显示的HTML页面数据
解决方案
- 你遇到的核心问题是这个地图用
<canvas>元素渲染,所有图形、文字都是直接绘制在位图上的,没有对应的独立DOM节点,所以你用BeautifulSoup解析DOM、Selenium找元素XPath的方式自然找不到目标内容。 - 优先推荐直接抓后端返回的源数据,比操作页面简单太多:打开浏览器开发者工具的「网络」面板,刷新页面后过滤Fetch/XHR类型的请求,很快就能找到返回所有社区地理边界、指标分级(Low/Medium/High)、社区名称、各项污染数值的JSON接口,直接用Python的requests库请求这个接口拿原始数据就行,完全不需要处理任何页面交互。
- 如果你确实需要走模拟页面交互的方案:
- 鼠标悬停弹出的提示框是独立的DOM元素,你可以先手动把鼠标放在地图上弹出提示,再用开发者工具的元素选择器直接点这个弹窗,就能查到它的CSS选择器/XPath,这类弹窗的class一般会带tooltip、popup这类关键词。
- 用Selenium的ActionChains模块,按坐标遍历canvas上的每个社区区域,触发悬停后抓取弹窗里的文本内容,同时可以通过读取对应坐标的canvas像素色值判断颜色分级。
- 拿到所有数据后,用pandas把数据整理成你需要的表头结构,直接调用
to_excel()或者to_csv()方法就能导出成符合要求的电子表格。
内容的提问来源于stack exchange,提问作者Bob
相关产品推荐
相关产品推荐

