• 利用Python爬取高德地图全国地铁站点信息


    利用Python中的requests库进行地铁站点信息的获取,同时将数据保存在本机excel中

    1. # 首先引入所需要的包
    2. import requests
    3. from bs4 import BeautifulSoup
    4. import pandas as pd
    5. import json
    6. # 发送 GET 请求获取网页内容
    7. url = 'http://map.amap.com/subway/index.html'
    8. response = requests.get(url)
    9. # 第一步:爬取两个 div 中的城市数据(包括 ID 和拼音),生成城市集合
    10. if response.status_code == 200:
    11. # 解码
    12. response_content = response.content.decode('utf-8')
    13. # 使用 Beautiful Soup 解析网页内容
    14. soup = BeautifulSoup(response_content, 'html.parser')
    15. # 从这里开始,你可以使用 Beautiful Soup 对象(soup)来提取所需的信息
    16. # 例如,查找标题
    17. title = soup.title
    18. # 通过Beautiful Soup来找到城市信息元素,并提取这个元素的信息
    19. for soup_a in soup.find('div', class_='city-list fl').find_all('a'):
    20. city_name_py = soup_a['cityname']
    21. city_id = soup_a['id']
    22. city_name_ch = soup_a.get_text()
    23. city_info_list.append({'name_py': city_name_py, 'id': city_id, 'name_ch': city_name_ch})
    24. # 获取未显示出来的城市列表
    25. for soup_a in soup.find('div', class_='more-city-list').find_all('a'):
    26. city_name_py = soup_a['cityname']
    27. city_id = soup_a['id']
    28. city_name_ch = soup_a.get_text()
    29. city_info_list.append({'name_py': city_name_py, 'id': city_id, 'name_ch': city_name_ch})
    30. print(city_info_list)
    31. else:
    32. print("无法获取网页内容")
    33. for city_info in city_info_list:
    34. city_id = city_info.get("id")
    35. city_name = city_info.get("name_py")
    36. city_name_ch = city_info.get("name_ch")
    37. print("开始爬取城市" + city_name_ch + "的数据")
    38. city_lines_list = []
    39. # 第二步:遍历城市集合,构造每一个城市的 url,并下载数据
    40. # 构造每个城市的url
    41. url = "http://map.amap.com/service/subway?_1717380520536&srhdata=" + city_id + '_drw_' + city_name + '.json'
    42. res = requests.get(url)
    43. content = res.content.decode('utf-8')
    44. # 将内容字符串转换成json对象
    45. content_json = json.loads(content)
    46. # 提取该城市的所有地铁线list
    47. line_info_list = content_json.get("l")
    48. # 第三步:开始处理每一个地铁线,提取内容到dataframe中
    49. for line_info in line_info_list:
    50. # 地铁线名字
    51. line_name = line_info["kn"]
    52. # 处理地铁线站点
    53. df_per_zd = pd.DataFrame(line_info["st"])
    54. df_per_zd = df_per_zd[['n', 'sl', 'poiid', 'sp', 't', 'su', 'sid']]
    55. df_per_zd['gd经度'] = df_per_zd['sl'].apply(lambda x: x.split(',')[0])
    56. df_per_zd['gd纬度'] = df_per_zd['sl'].apply(lambda x: x.split(',')[1])
    57. df_per_zd.drop('sl', axis=1, inplace=True)
    58. df_per_zd['路线名称'] = line_info['ln']
    59. df_per_zd['城市名称'] = city_name_ch
    60. df_per_zd.rename(columns={"n": "站点名称", "poiid": "POI编号", "sp": "拼音名称", "t": "换乘标志 1:换乘,0:不可换乘", "su": "su", "sid": "sid编号"}, inplace=True)
    61. # 先将这条地铁线处理过的dataframe存起来,我们后面给他放到一张表里
    62. city_lines_list.append(df_per_zd)
    63. # 这段代码就是将地铁线数据列表聚合到一张表里,形成每个城市的地铁站数据
    64. city_subway_data = pd.concat(city_lines_list, ignore_index=True)
    65. # 第四步:将处理好的文件保存为xlsx
    66. city_subway_data.to_excel(city_name_ch + '.xlsx', sheet_name='Sheet1')

  • 相关阅读:
    基于javaweb+mysql的教务选课管理系统(管理员、教师、学生)
    一、MFC介绍
    小程序中使用 web-view 嵌入H5程序 localStorage和vuex的选择
    npm run build 打包报错 - 添加 parallel: false, 解决
    第24篇 数据库(四)SQL查询模型QSqlQueryModel
    详解redis的三种特殊数据类型
    MD5加密——原理介绍
    【Java】工具类的设计
    过一遍Python的Numpy库(最后因为各种原因只过到一半)
    人脸核身基础版 SDK 接入 > 合作方后台上送身份信息
  • 原文地址:https://blog.csdn.net/liiukangkang/article/details/136454269