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 에서 기차표 정 보 를 캡 처 하 는 것 입 니 다[수정판].여러분 에 게 도움 이 되 기 를 바 랍 니 다.궁금 한 점 이 있 으 시 면 저 에 게 메 시 지 를 남 겨 주세요.편집장 은 제때에 답 해 드 리 겠 습 니 다.여기 서도 저희 사이트 에 대한 여러분 의 지지 에 감 사 드 립 니 다!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
로마 숫자를 정수로 또는 그 반대로 변환그 중 하나는 로마 숫자를 정수로 변환하는 함수를 만드는 것이었고 두 번째는 그 반대를 수행하는 함수를 만드는 것이었습니다. 문자만 포함합니다'I', 'V', 'X', 'L', 'C', 'D', 'M' ; 문자열이 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.