一、思路
1、打开12306.cn
2、ctrl + shift + i(开发者人员工具)
得到站点信息链接:https://kyfw.12306.cn/otn/resources/js/framework/station_name.js?station_version=1.9028或者https://www.12306.cn/index/script/core/common/station_name_v10037.js;
3、看一下这个链接里面有什么?
虽然乱码?但不必担心,我们得到了我们需要的东西,python会解决这些问题!!!
接下来,需要爬取这个页面所有的站点名称(station_name)和站点编码(station_code),很明显,这只需要用到requests库和re库即可完成。
二、代码(复制运行即可)
import re
import json
import requests
import pandas as pd
from pprint import pprint
#JS,这个用浏览器打开会呈现一堆看不懂的文字,需要用正则表达式对其解析
url = 'https://kyfw.12306.cn/otn/resources/js/framework/station_name.js?station_version=1.9028'
#对网页发送get请求
response = requests.get(url,verify=False)
#编写正则表达式
station = re.findall(r'([\u4e00-\u9fa5]+)\|([A-Z]+)',response.text)
#字典转化,并打印,(需pip install pprint),输出的字典没有名称,需加上名称“station = ”,再使用
pprint(dict(station),indent=4)
#将字典赋给station
station = dict(station)
#以.csv形式输出
pd.DataFrame(station,index=[0]).to_csv('站点信息.csv',encoding='GB18030')
三、结果
字典形式:
四、总结
通常爬取站点信息是为了爬取12306车次信息,做余票查询或抢票程序。如果为了研究用途,12306的全部车次信息是非常值得关注的,下一篇将提供这方面的源代码!