python 3.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('       :
') f = stations[f1] t1 = input(' :
') t = stations[t1] d1 = input(' :
') d = str('2018-') + change_date(d1) student = input(' , (yes/no)') print(' ' + f1 + ' ' + t1 + ' , ......') url = 'https://kyfw.12306.cn/otn/leftTicket/query?leftTicketDTO.train_date={d}&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],
          '
'.join([colored('green', station_list[row_list[6]]), colored('red', station_list[row_list[7]])]), '
'.join([colored('green', row_list[8]), colored('red', row_list[9])]), row_list[10], ] + chair_list) print(' , %d 。' % num) # print(trains)
여기 서 나 는chair_lists()함 수 를 추가 하여 순환 처리 에 대응 하 는 표 세그먼트 를 만 들 었 다.
 빈 데 이 터 를'C'로 바 꾸 기

 station_list = dict(zip(stations.values(), stations.keys()))
 #station_list                   
 trains.add_row([row_list[3],
          '
'.join([colored('green', station_list[row_list[6]]), colored('red', station_list[row_list[7]])]), '
'.join([colored('green', row_list[8]), colored('red', row_list[9])]), row_list[10], ] + chair_list)
이 캡 처 사례 는 우리 가 하 나 를 보면 열 을 알 수 있 고 많은 기능 을 확대 할 수 있 으 며 우리 가 데 이 터 를 신속하게 조회 하 는 데 편리 하 다.예 를 들 어 전시 가격 등 이다!
 원본 코드:https://github.com/morganlions/train
총결산
위 에서 말 한 것 은 편집장 이 여러분 에 게 소개 한 python 3.X 에서 기차표 정 보 를 캡 처 하 는 것 입 니 다[수정판].여러분 에 게 도움 이 되 기 를 바 랍 니 다.궁금 한 점 이 있 으 시 면 저 에 게 메 시 지 를 남 겨 주세요.편집장 은 제때에 답 해 드 리 겠 습 니 다.여기 서도 저희 사이트 에 대한 여러분 의 지지 에 감 사 드 립 니 다!

좋은 웹페이지 즐겨찾기