用python制作火车站列车进站时刻表


最近需要查看火车站列车进站时刻
 
效果图

 

 

一、搜集数据
 
只有始发站和终点站信息,并没有到无锡站时间,只能根据每个车次获取
  车次 出站 - 到站 类型 开车时间 到站时间 运行时间 里程
  D306/D307
 无锡
动车组 00:02 10:03 10小时4分 1355
  K5562
 无锡
  亳州
快速 00:20 11:21 11小时5分 571
  K5601/K5604
 无锡
  宁波
快速 00:25 07:06 6小时46分 203
  K8372
 无锡
  徐州
快速 00:26 08:42 8小时20分 563
  T136
 无锡
  济南
特快 00:32 10:14 9小时46分 842
  K8386/K8387
 无锡
  阜阳
快速 00:51 08:48 8小时0分 571
from django.http import HttpResponse
from django.http.response import JsonResponse
from django.shortcuts import render
from coviddata.models import traintime
import urllib.request
import requests
import re
from bs4 import BeautifulSoup
import datetime
from distutils.filelist import findall
# 数据库操作
def getTrainData():
    # 初始化
    trainid=""
    htmlcontext= ""
    list = traintime.objects.all()
    #list = traintime.objects.order_by('trainid')[0:1]
    for var in list:
        trainid = var.trainid + ""
        webname="http://search.huochepiao.com/checi/"+trainid
        response = requests.get(webname)
        # 类文件对象支持 文件对象的操作方法,如read()方法读取文件全部内容,返回字符串
        htmlcontext = response.content
        htmlcontext = str(htmlcontext, 'gbk')
        soup = BeautifulSoup(htmlcontext, "html.parser")
        for tag in soup.find_all('a', href='http://search.huochepiao.com/chezhan/wuxi'):
            parent=tag.parent.parent
            tds=parent.find_all('td')
            var.arrivetime = tds[3].get_text()
        tag=soup.find('td',text='始发站')
        parent = tag.parent.parent
        tds = parent.find_all('td')
        var.startstation = tds[8].get_text()
        var.endstation=tds[10].get_text()
        var.save()
利用requests逐个获取车次信息
利用soup找到到达无锡站时间
利用model traintime 保存到数据库
 
二、展示数据
# -*- coding: utf-8 -*-
from django.http import HttpResponse
from django.http.response import JsonResponse
from django.shortcuts import render
from coviddata.models import traintime
import urllib.request
import requests
import re
from bs4 import BeautifulSoup
import datetime
from distutils.filelist import findall
def gettrainlist(request):
    request.encoding = 'utf-8'
    htmlcontext=""
    context = {}
    start_time = datetime.time(0, 0, 0)
    end_time = datetime.time(23, 59, 59)
    #根据四个班次分时刻显示
    if 'q' in request.GET and request.GET['q']:
        name=request.GET['q']
        url=name
        if (name=="1"):
            start_time = datetime.time(0,0,0)
            end_time = datetime.time(5,59,59)
        elif (name=="2"):
            start_time = datetime.time(6, 0, 0)
            end_time = datetime.time(11, 59, 59)
        elif (name == "3"):
            start_time = datetime.time(12, 0, 0)
            end_time = datetime.time(17, 59, 59)
        elif (name == "4"):
            start_time = datetime.time(18, 0, 0)
            end_time = datetime.time(23, 59, 59)
        else:
            start_time = datetime.time(18, 0, 0)
            end_time = datetime.time(23, 59, 59)
    else:
        start_time = datetime.time(0, 0, 0)
        end_time = datetime.time(23, 59, 59)
        #list = communitydata.objects.filter(districtname__icontains=name)
    list = traintime.objects.filter(arrivetime__range=(start_time, end_time)).order_by('arrivetime')
    context['trainlist'] = list
    return render(request, 'trainlist.html', context)

 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM