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

 更新时间:2024年03月08日 12:19:06   作者:YiFoEr_Liu  
requests 模块是 python 基于 urllib,采用 Apache2 Licensed 开源协议的 HTTP 库,它比 urllib 更加方便,可以节约我们大量的工作,完全满足 HTTP 测试需求,这篇文章主要介绍了利用Python requests库爬取高德地图全国地铁站点信息,需要的朋友可以参考下

requests库

一、 基本概念

1、 简介

requests 模块是 python 基于 urllib,采用 Apache2 Licensed 开源协议的 HTTP 库。它比 urllib 更加方便,可以节约我们大量的工作,完全满足 HTTP 测试需求。Requests 的哲学是以 PEP 20 的习语为中心开发的,所以它比 urllib 更加 Pythoner

2、 获取

通过 pip install requests 安装 requests 库

导包:

import requests

3、 http 协议

http ,超文本传输协议,是互联网上应用最为广泛的一种网络协议。所有的WWW文件都必须遵守这个标准。设计HTTP最初的目的是为了提供一种发布和接收HTML页面的方法,HTTP是一种基于"请求与响应"模式的、无状态的应用层协议。HTTP协议采用URL作为定位网络资源的的标识符

3.1 URL

统一资源定位符是互联网上标准资源地址。互联网上的每一个文件都有一个唯一的 URL,它包含的信息指出文件的位置以及浏览器应该怎么处理它

URL 的一般语法格式为:

protocol://host[:port]/path/[?query]#fragment
http://www.itcast.cn/index.html?name=andy&age=18#link
组成说明
protocol通信协议,常用:http、https 等
host主机(域名)
port端口号,可选,省略时候使用方案的默认端口,如:http的默认端口为80
path路径,由零或多个 ‘/’ 符号隔开的字符串,一般用来表示主机上的一个目录或文件地址
query参数,以键值对的形式通过 & 来连接
fragment片段,# 后面内容常见于链接 锚点

3.2 常用 http 请求方法

方法说明
requsts.requst()构造一个请求,最基本的方法,是下面方法的支撑
requsts.get()获取网页,对应HTTP中的GET方法
requsts.post()向网页提交信息,对应HTTP中的POST方法
requsts.head()获取html网页的头信息,对应HTTP中的HEAD方法
requsts.put()向html提交put方法,对应HTTP中的PUT方法
requsts.patch()向html网页提交局部请求修改的的请求,对应HTTP中的PATCH方法
requsts.delete()向html提交删除请求,对应HTTP中的DELETE方法

GET,HEAD是从服务器获取信息到本地,PUT,POST,PATCH,DELETE是从本地向服务器提交信息。通过URL和命令管理资源,操作独立无状态,网络通道及服务器成了黑盒子。

正文开始

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

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

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

到此这篇关于利用Python requests库爬取高德地图全国地铁站点信息的文章就介绍到这了,更多相关Python爬取地铁站点信息内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • python实现打砖块游戏

    python实现打砖块游戏

    这篇文章主要为大家详细介绍了Python实现打砖块游戏,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-02-02
  • 利用Python将数值型特征进行离散化操作的方法

    利用Python将数值型特征进行离散化操作的方法

    今天小编就为大家分享一篇利用Python将数值型特征进行离散化操作的方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-11-11
  • 浅析python实现scrapy定时执行爬虫

    浅析python实现scrapy定时执行爬虫

    这篇文章主要介绍了浅析python实现scrapy定时执行爬虫的相关资料,需要的朋友可以参考下
    2018-03-03
  • Django中get()与filter()的区别及常见错误

    Django中get()与filter()的区别及常见错误

    Django中get()和filter()是数据查询的核心方法,本文就来介绍一下Django中get()与filter()的区别及常见错误,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2025-11-11
  • python实现校园网自动登录的示例讲解

    python实现校园网自动登录的示例讲解

    下面小编就为大家分享一篇python实现校园网自动登录的示例讲解,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-04-04
  • Python基于回溯法子集树模板解决马踏棋盘问题示例

    Python基于回溯法子集树模板解决马踏棋盘问题示例

    这篇文章主要介绍了Python基于回溯法子集树模板解决马踏棋盘问题,简单描述了国际象棋马踏棋盘问题,并结合实例形式分析了Python使用回溯法子集树模板解决马踏棋盘问题的具体步骤与相关操作注意事项,需要的朋友可以参考下
    2017-09-09
  • pycharm找不到解释器问题的解决方案

    pycharm找不到解释器问题的解决方案

    安装好PyCharm之后,新建或者导入项目碰到找不到解释器的情况,不用担心,追根到底,咱们就是需要找到pycharm*.exe的文件,那么这个文件在哪里呢?所以本文就给大家介绍一下pycharm找不到解释器问题的解决方案,需要的朋友可以参考下
    2024-04-04
  • Python Django模板之模板过滤器与自定义模板过滤器示例

    Python Django模板之模板过滤器与自定义模板过滤器示例

    这篇文章主要介绍了Python Django模板之模板过滤器与自定义模板过滤器,结合实例形式分析了Django框架模板过滤器与自定义模板过滤器相关功能、原理、使用方法及相关操作注意事项,需要的朋友可以参考下
    2019-10-10
  • PYQT5设置textEdit自动滚屏的方法

    PYQT5设置textEdit自动滚屏的方法

    今天小编就为大家分享一篇PYQT5设置textEdit自动滚屏的方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-06-06
  • python工具模块介绍之time 时间访问和转换的示例代码

    python工具模块介绍之time 时间访问和转换的示例代码

    这篇文章主要介绍了python工具模块介绍-time 时间访问和转换,本文通过示例代码给大家介绍的非常详细,对大家啊的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2023-04-04

最新评论