python实战:获取全国火车站、高铁站信息(附完整代码)

通过本文可以获取3091个全国火车站的车站名称、所属铁路局、车站电报码、售票时间等信息。

分析网页

打开12306官网,https://www.12306.cn/,点击“信息查询”下面的“起售时间”。

python实战:获取全国火车站、高铁站信息(附完整代码)_第1张图片

键盘 F12 快捷键,或者鼠标右击“检查”打开浏览器的检查页面。

在“起售时间”的输入框内任意输入一个车站名称。

python实战:获取全国火车站、高铁站信息(附完整代码)_第2张图片

找到queryAllCacheSaleTime这个请求:

python实战:获取全国火车站、高铁站信息(附完整代码)_第3张图片

queryAllCacheSaleTime请求response的data值就是全国的车站。

python实战:获取全国火车站、高铁站信息(附完整代码)_第4张图片

可以看出这是一个非常简单的爬虫,一个请求就可以完成获取任务,很适合初学者练手。

编写代码

接下来编写python代码,主要用到的库是requests和pandas。
首先requests库发送请求,获取response,转换为json格式。
然后用pandas库的json_normalize函数将json数据展平。
最后用pandas库将数据保存到excel表格内。

完整代码如下:

import requests
import pandas as pd
import time
from datetime import datetime

url = "https://kyfw.12306.cn/index/otn/index12306/queryAllCacheSaleTime"

headers = {
    "Cookie": "Cookie",  #切换自己的Cookie
    "User-Agent": "User-Agent"  #切换自己的User-Agent
}


content_json = requests.get(url=url, headers=headers).json()
print("等待3s")
time.sleep(3)  # 防止被检测(不要低于3)
print(content_json)  # 用于观察
# df = pd.DataFrame(content_json['data'])
content_list = pd.json_normalize(content_json['data'], errors='ignore')

if __name__ == '__main__':
    # 当前时间作为文件名后缀
    curr_time = datetime.now()
    timestamp = datetime.strftime(curr_time, '%Y-%m-%d %H-%M-%S')
    # time = time.time()  # 时间

    # 将 DataFrame 保存为 excel 文件
    content_list.to_excel(f"全国火车站-{timestamp}.xlsx", index=False)
    print("保存完成!")

    # 查看 DataFrame 的行数和列数。
    rows = content_list.shape
    print("请求得到的表格行数与列数:", rows)

运行代码,pycharm控制台输出如下,获取到3091个全国火车站:

python实战:获取全国火车站、高铁站信息(附完整代码)_第5张图片

获得数据

打开excel表格,查看数据集如下,包含车站名称、所属铁路局、车站电报码、售票时间等信息:

python实战:获取全国火车站、高铁站信息(附完整代码)_第6张图片

你可能感兴趣的:(python)