通过本文可以获取3091个全国火车站的车站名称、所属铁路局、车站电报码、售票时间等信息。
打开12306官网,https://www.12306.cn/
,点击“信息查询”下面的“起售时间”。
键盘 F12 快捷键,或者鼠标右击“检查”打开浏览器的检查页面。
在“起售时间”的输入框内任意输入一个车站名称。
找到queryAllCacheSaleTime
这个请求:
在queryAllCacheSaleTime
请求response的data值就是全国的车站。
可以看出这是一个非常简单的爬虫,一个请求就可以完成获取任务,很适合初学者练手。
接下来编写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个全国火车站:
打开excel表格,查看数据集如下,包含车站名称、所属铁路局、车站电报码、售票时间等信息: