Web Scraping交通摄像头地图:获取摄像头地理位置及遍历方法问询
针对Houston Transtar交通摄像头的爬取方案
获取摄像头地理位置
- 抓包找API接口:打开浏览器开发者工具(F12),切换到「Network」标签页,刷新目标页面后,过滤XHR/Fetch类型请求,查找包含
camera、cctv、location等关键词的请求。这类请求通常会返回JSON格式的完整摄像头元数据,里面直接包含经纬度、ID、图片链接等信息。 - 解析页面元素属性:如果找不到API,查看页面中摄像头标记的HTML元素,通常会在
data-lat、data-lng这类自定义属性,或者元素的style定位参数中存储坐标;也可以提取点击标记后弹出的信息框内的位置文本,再转换为坐标(如果有)。
高效遍历所有摄像头的方法
- 优先调用官方数据接口:这是最高效的方式,一次请求就能获取所有摄像头的完整数据,无需逐个遍历页面元素。拿到数据后,直接解析出每个摄像头的ID、位置,再按格式构造图片链接(比如你示例中的
https://www.houstontranstar.org/snapshots/cctv/{ID}.jpg,末尾的时间戳参数用于缓存,可选择性添加)。 - 批量提取页面元素:如果无API可用,用Python的
BeautifulSoup(静态页面)或Playwright/Selenium(动态加载页面)加载目标页面,用CSS选择器或XPath定位所有摄像头标记元素,批量提取每个元素的位置和图片链接。注意如果地图是滚动/缩放加载,需用无头浏览器模拟交互,确保所有元素加载完成。
简单代码示例(基于API接口)
import requests import json # 替换为实际抓包得到的摄像头数据接口URL api_url = "https://traffic.houstontranstar.org/api/xxx/cameras" headers = { "Referer": "https://traffic.houstontranstar.org/layers/layers_ve.aspx?&inc=true&rc=true&lc=false&cam=true&dms=false&spd=true&tr=false&wthr=false&rfw=true&rm=false&nml=false&nmd=false", "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36" } response = requests.get(api_url, headers=headers) cameras = json.loads(response.text) for cam in cameras: cam_id = cam.get("id") lat = cam.get("latitude") lng = cam.get("longitude") img_url = f"https://www.houstontranstar.org/snapshots/cctv/{cam_id}.jpg" print(f"ID: {cam_id}, 位置: ({lat}, {lng}), 图片链接: {img_url}")
注意事项
- 遵守网站
robots.txt规则,控制请求频率,避免IP被封禁。 - 如果接口有反爬验证,需在请求头中添加Cookie、Referer等浏览器标识信息,模拟正常访问。
- 动态加载场景下,使用无头浏览器时需设置足够的等待时间,确保所有摄像头元素加载完毕。
内容的提问来源于stack exchange,提问作者Argov
相关产品推荐
相关产品推荐

