需求:从12306中获取车站编码
获取url
结果:
寻求规律方便编译
这里找不到正则的规律,所以上百度找到了相应的正则
结果是一个列表里面嵌套的元组
用字典方式转换
发现了问题:在此时,不是分成了若干个字典,而是数据都在一个字典中,这样子写入文件会报错
还有另一个报错信息:指的是表头只有两个,而数据有很多个,不能解析
问题:数据都被包裹在一个大字典了,而不是分成不同的字典,导致无法解读,而如果只是简单的写入文件,也不行
解决方法:用enumerate()函数——指定索引值,通过遍历来获取来进行字典分割
但如果直接用这个来写入csv,也会报错——原因在于没有拿列表包裹
解决方法:将字典放入空列表再进行csv文件写入
最后结果
整体代码展示:
import requests
import re
import csv
url ='https://kyfw.12306.cn/otn/resources/js/framework/station_name.js?station_version=1.9028'
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.128 Safari/537.36'
}
req =requests.get(url=url,headers=headers)
req.encoding ='utf-8'
# print(req.text)
reqt =req.text
# ## 规律:
# # @bjb|北京北|VAP|beijingbei|bjb|
# # 0@bjd|北京东|BOP|beijingdong|bjd|
# # 1@bji|北京|BJP|beijing|bj|
# # 2@bjn|北京南|VNP|beijingnan|bjn|
station =re.findall(r'([\u4e00-\u9fa5]+)\|([A-Z]+)',reqt)
# print(station)
a = dict(station)
lst =[]
for stations,index in enumerate(a):
dict ={}
# dict['name'] =
# print(index,a[index])
dict['name'] =index
dict['编码'] =a[index]
# print(dict)
lst.append(dict)
# print(lst)
headers =('name','编码')
with open('12306车站编码.csv','w',encoding='utf-8',newline='')as f:
writer =csv.DictWriter(f,fieldnames=headers)
writer.writeheader()
writer.writerows(lst)