中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

使用python3.X怎么抓取火車票信息

發布時間:2021-06-11 17:51:27 來源:億速云 閱讀:177 作者:Leah 欄目:開發技術

這篇文章將為大家詳細講解有關使用python3.X怎么抓取火車票信息,文章內容質量較高,因此小編分享給大家做個參考,希望大家閱讀完這篇文章后對相關知識有一定的了解。

實現后如圖所示:

使用python3.X怎么抓取火車票信息

首先我們需要抓取一些基礎的數據,各大火車站信息!

import urllib
from urllib import request
import re
url = 'https://kyfw.12306.cn/otn/resources/js/framework/station_name.js?station_version=1.8955'
req = urllib.request.Request(url)
r = urllib.request.urlopen(req).read().decode('utf-8')
stations = re.findall(r'([\u4e00-\u9fa5]+)|([A-Z]+)', r)
stations = dict(stations)
stations = dict(zip(stations.keys(),stations.values()))

上面的代碼通過抓取,網頁信息,返回一個字典數據:

   stations = dict(zip(stations.keys(),stations.values()))#這行代碼在后面進行了建值互換,這里沒有進行過修改,這是原文的數據。

火車站的數據抓取成功,我們接下來抓取查詢數據,代碼如下:

from station import stations
import warnings
def change_date(d1) :
  if '.' in d1 :
    d1 = d1.replace('.', '-')
  if not d1.startswith('0') :
    d1 = str(0) + d1
  if '-' in d1[-2] :
    d1 = d1[:-1] + '0' + d1[-1]
  return d1
def student_or_not(student) :
  if 'y' in student[0].lower() :
    return '0X00'
  else :
    return 'ADULT'
f1 = input('請輸入開始城市:\n')
f = stations[f1]
t1 = input('請輸入目的城市:\n')
t = stations[t1]
d1 = input('請輸入出發時間:\n')
d = str('2018-') + change_date(d1)
student = input('是否為學生票,輸入(yes/no)')
print('正在查詢' + f1 + '至' + t1 + '的列車,請聽聽音樂......')
url = 'https://kyfw.12306.cn/otn/leftTicket/query?leftTicketDTO.train_date=aegqsqibtmh&leftTicketDTO.from_station={f}&leftTicketDTO.to_station={t}&purpose_codes={student}'
url = url.format(f=f, d=d, t=t, student=student_or_not(student))
warnings.filterwarnings("ignore")

這里本人增加了兩個函數 change_date() 和 student_or_not()

 change_date() 這個函數對用戶輸入日期的行為進行了簡化,提高了用戶體驗,可以直接輸入比如7.3這樣的日期,其他的符號,我們可以自己進行擴展。

student_or_not() 這個函數的作用是判斷查詢的是普通票還是學生票

美化顯示,區分到站和出發站點的顏色,我們加入如下函數

def colored(color, text) :
  table = {
    'red'  : '\033[91m',
    'green' : '\033[92m',
    'nc'  : '\033[0m'
  }
  cv = table.get(color)
  nc = table.get('nc')
  return ''.join([cv, text, nc])

最后我們進行數據處理展示:

import requests
from get_urltrain import url
from prettytable import PrettyTable
from color_set import colored
from station import stations
def chair_lists(row_list) :
  chair_list = []
  for i in range(len(row_list) - 5, 21, -1) :
    if row_list[i] != '' :
      chair_list.append(row_list[i])
    else :
      chair_list.append('--')
  return chair_list
headers = {
  'user-agent' : 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/62.0.3202.62 Safari/537.36'
}
r = requests.get(url, verify=False, headers=headers) # 請求網址1的內容
rows = r.json()['data']['result'] # 將內容解析為列表
trains = PrettyTable()
trains.field_names = ["車次", "車站", "時間", "歷時", "商務座\特等座", "一等座", "二等座", "高級軟臥", "軟臥", "動臥", "硬臥 ", "軟座 ", "硬座", "無座",
           "其他"]
# 設置table的header
num = len(rows) # 打印列表的個數
# station1 = dict([v, k] for k, v in stations.items())
station_list = dict(zip(stations.values(), stations.keys()))
for row in rows : # 列表循環
  row_list = row.split('|')
  chair_list = chair_lists(row_list)
  trains.add_row([row_list[3],
          '\n'.join([colored('green', station_list[row_list[6]]),
                colored('red', station_list[row_list[7]])]),
          '\n'.join([colored('green', row_list[8]),
                colored('red', row_list[9])]),
          row_list[10],
          ] + chair_list)
print('查詢結束,共有 %d 趟列車。' % num) # 列表個數也就是列車個數
print(trains)

這里我增加了 chair_lists()函數進行循環處理對應的表段

 用于空數據替換成‘–'

 station_list = dict(zip(stations.values(), stations.keys()))
 #station_list 進行了建值互換方便下面的循環中的調用
 trains.add_row([row_list[3],
          '\n'.join([colored('green', station_list[row_list[6]]),
                colored('red', station_list[row_list[7]])]),
          '\n'.join([colored('green', row_list[8]),
                colored('red', row_list[9])]),
          row_list[10],
          ] + chair_list)

關于使用python3.X怎么抓取火車票信息就分享到這里了,希望以上內容可以對大家有一定的幫助,可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

稷山县| 香河县| 沙河市| 同德县| 亳州市| 富顺县| 乡城县| 连州市| 秭归县| 临沂市| 昔阳县| 浑源县| 石渠县| 巴里| 社会| 古浪县| 昔阳县| 长治市| 新化县| 文山县| 久治县| 临泽县| 琼中| 油尖旺区| 宜丰县| 海丰县| 遂溪县| 淮阳县| 怀化市| 江都市| 阿拉善左旗| 敦化市| 庐江县| 西盟| 兴宁市| 三明市| 张家口市| 美姑县| 张北县| 华阴市| 凌海市|