欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

python3.X 抓取火車票信息【修正版】

 更新時間:2018年06月19日 14:08:33   作者:MorganLions  
這篇文章主要介紹了python3.X 抓取火車票信息修正版,本文是在源代碼的基礎上進行的修改,需要的朋友可以參考下

代碼是在源代碼的基礎上進行的修改。希望對你有所幫助!

 實現(xiàn)后如圖所示:

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

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()))

上面的代碼通過抓取,網(wǎng)頁信息,返回一個字典數(shù)據(jù):

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

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

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('請輸入出發(fā)時間:\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=vvxyksv9kd&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")

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

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

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

美化顯示,區(qū)分到站和出發(fā)站點的顏色,我們加入如下函數(shù)

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])

最后我們進行數(shù)據(jù)處理展示:

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) # 請求網(wǎng)址1的內(nèi)容
rows = r.json()['data']['result'] # 將內(nèi)容解析為列表
trains = PrettyTable()
trains.field_names = ["車次", "車站", "時間", "歷時", "商務座\特等座", "一等座", "二等座", "高級軟臥", "軟臥", "動臥", "硬臥 ", "軟座 ", "硬座", "無座",
           "其他"]
# 設置table的header
num = len(rows) # 打印列表的個數(shù)
# station1 = dict([v, k] for k, v in stations.items())
station_list = dict(zip(stations.values(), stations.keys()))
for row in rows : # 列表循環(huán)
  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) # 列表個數(shù)也就是列車個數(shù)
print(trains)

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

 用于空數(shù)據(jù)替換成‘–'

 station_list = dict(zip(stations.values(), stations.keys()))
 #station_list 進行了建值互換方便下面的循環(huán)中的調(diào)用
 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)

這個抓取案例我們可以舉一反三,可以拓展很多功能,方便我們進行數(shù)據(jù)快速查詢,比如展示價格等等!

 源代碼在:https://github.com/morganlions/train

總結

以上所述是小編給大家介紹的python3.X 抓取火車票信息【修正版】,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對腳本之家網(wǎng)站的支持!

相關文章

  • python實現(xiàn)低通濾波器代碼

    python實現(xiàn)低通濾波器代碼

    今天小編就為大家分享一篇python實現(xiàn)低通濾波器代碼,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-02-02
  • python3中編碼獲取網(wǎng)頁的實例方法

    python3中編碼獲取網(wǎng)頁的實例方法

    在本篇文章里小編給大家整理了一篇關于python3中編碼獲取網(wǎng)頁的實例方法,有興趣的朋友們可以學習下。
    2020-11-11
  • 淺談Python協(xié)程asyncio

    淺談Python協(xié)程asyncio

    今天給大家?guī)淼氖顷P于Python的相關知識,文章圍繞著Python協(xié)程展開,文中有非常詳細的介紹及代碼示例,需要的朋友可以參考下
    2021-06-06
  • Python之a(chǎn)scii轉中文的實現(xiàn)

    Python之a(chǎn)scii轉中文的實現(xiàn)

    這篇文章主要介紹了Python之a(chǎn)scii轉中文的實現(xiàn)方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-05-05
  • python實現(xiàn)定時播放mp3

    python實現(xiàn)定時播放mp3

    這篇文章主要介紹了python實現(xiàn)定時播放mp3,程序非常簡單,功能很實用,主要是使用python實現(xiàn)了一首mp3歌每半小時播放一次,有需要的小伙伴可以參考下。
    2015-03-03
  • Python中字典(dict)和列表(list)的排序方法實例

    Python中字典(dict)和列表(list)的排序方法實例

    這篇文章主要介紹了Python中字典(dict)和列表(list)的排序方法實例,總結來說優(yōu)先使用內(nèi)置的sort()方法進行排序,需要的朋友可以參考下
    2014-06-06
  • python中的字符串內(nèi)部換行方法

    python中的字符串內(nèi)部換行方法

    今天小編就為大家分享一篇python中的字符串內(nèi)部換行方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-07-07
  • 五分鐘學會Python 模塊和包、文件

    五分鐘學會Python 模塊和包、文件

    通過學習本文可以五分鐘掌握Python 模塊和包、文件的相關知識,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-08-08
  • Python在圖片中添加文字的兩種方法

    Python在圖片中添加文字的兩種方法

    這篇文章主要給大家介紹了在Python在圖片中添加文字的兩種方法,分別是使用OpenCV和PIL這兩個方法實現(xiàn),在實際應用中要在這兩種方法中擇優(yōu)使用。兩種方法都給出了詳細示例代碼,需要的朋友可以參考下。
    2017-04-04
  • Python網(wǎng)絡通訊之TCP協(xié)議實現(xiàn)服務器和客戶端實例

    Python網(wǎng)絡通訊之TCP協(xié)議實現(xiàn)服務器和客戶端實例

    這篇文章主要介紹了Python網(wǎng)絡通訊之TCP協(xié)議實現(xiàn)服務器和客戶端實例, socket編程一種獨立于協(xié)議的網(wǎng)絡編程接口,應用程序可以通過它發(fā)送或接收數(shù)據(jù),可對其進行像對文件一樣的打開、讀寫和關閉等操作,需要的朋友可以參考下
    2023-08-08

最新評論