全国轨道交通站点经纬度

本文介绍了一个使用Python编写的脚本,通过requests和BeautifulSoup库从高德地图获取全国轨道交通站点的经纬度信息,确保请求间隔随机化以避免影响服务。脚本会抓取每个城市的地铁线路和站名,保存为JSON文件。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 一  简介

利用python 批量下载高德地图全国轨道交通站点经纬度坐标信息。注意设置sleep时间,不要影响高德地图的服务效能。

二 需要导入的模块

 需要导入的模块有requests,bs4,json,codecs,time,random,其中requests和bs4需要安装,其他是自带的模块。

三 具体详细代码,可直接使用

//导入模块
import requests
from bs4
import BeautifulSoup
import json
import codecs
import time
import random
//定义函数
def get_subway_data():
  #网址
  url = "http://map.amap.com/subway/index.html"
   #这个要copy你自己电脑的
  headers = { "User-Agent":"XXXXXXXXXXXXXXXXXXXXX"}
  response = requests.get(url,headers=headers, timeout=50)  response_content = response.content.decode("utf-8") 
  soup = BeautifulSoup(response_content, 'html.parser') 
  city_elements = soup.find_all("a", {"cityname": True, "id": True})
  # Find all <a> tags with cityname and id attributes
  
   citys_info = [{"city_name": el["cityname"], "city_id": el["id"]} for el in city_elements]
  all_citys_stations_data = []
  for city in citys_info:
    city_name = city["city_name"]
    print(city_name)
    city_id = city["city_id"]
    subway_url = f'http://map.amap.com/service/subway?_1708930872179&srhdata={city_id}_drw_{city_name}.json'   
    subway_response = requests.get(subway_url,headers=headers,timeout=50)    subway_data = subway_response.json()
    citys_stations_data = {}
    citys_stations_data["city_name"] = city["city_name"]    citys_stations_data["line_stations_data"] = []
    for line in subway_data["l"]:
      single_line_data = {}
      single_line_data["line_name"] = line["ln"]      single_line_data["stations"] = []
      for station in line["st"]:
        station_info = {"Station_Name": station["n"], "Latitude": float(station["sl"].split(",")[1]),"Longitude": float(station["sl"].split(",")[0])}
        single_line_data["stations"].append(station_info)      citys_stations_data["line_stations_data"].append(single_line_data)    print(citys_stations_data)    all_citys_stations_data.append(citys_stations_data)
        time.sleep(60 + random.randint(0,200))
        return all_citys_stations_data
      all_citys_metro_lines_stations_data = get_subway_data()
      json_data = json.dumps(all_citys_metro_lines_stations_data, ensure_ascii=False)
      with codecs.open("all_metro_stations.json", "w",  "utf-8") as file:    file.write(json_data)
      print(all_citys_metro_lines_stations_data)

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值