どうもAIの挙動がおかしい
AIの出力したデータを確認するのは気に食わないので、自分で作ってみました
navitimeのhtmlにちょっと癖があります
データはxmlがいいですね
AIは時刻表のhtmlタグ構成を完全に把握できていないみたいです
navitimeから時刻表をcsvで取り込めます。後はEXCELで調整
URLを変更するだけです。たぶんどこの時刻表も取得できると思います
BeautifulSoupで簡単にhtmlの要素が取れるので超便利です。
from bs4 import BeautifulSoup
import urllib.request
import requests
#ここ変更すれば汎用的になる
#----------------------
#url = 'https://www.navitime.co.jp/diagram/bus/00102648/00025234/1/'
url = 'https://www.navitime.co.jp/diagram/bus/00102480/00025236/0/'
#----------------------
diagramTable1="d_1_0"
diagramTable2="d_1_1"
diagramTable3="d_1_2"
diagramTable4="d_0_0"
diagramTable5="d_0_1"
diagramTable6="d_0_2"
timetable1="timetable1.csv"
timetable2="timetable2.csv"
def GetTimeTable(soup,rows,id,dl):
for block1 in soup.find_all(id=id):
for block in block1.select(dl):
hour = block.dt.get_text(strip=True)
rows.setdefault(hour, []).append(",")
for li in block.select('ul.timeTable li'):
minute = li.select_one('div[style*="underline"]').get_text(strip=True)
dest = li.select_one('.arrive_station_name').get_text(strip=True)
rows.setdefault(hour, []).append((minute+ dest))
def diagram(url,path,diagram1,diagram2,diagram3):
html=requests.get(url)
soup = BeautifulSoup(html.text, 'html.parser')
rows = {} # hour -> list of (minute, dest)
GetTimeTable(soup,rows,diagram1,"dl.dl_0")
GetTimeTable(soup,rows,diagram2,"dl.dl_1")
GetTimeTable(soup,rows,diagram3,"dl.dl_2")
# path_w = 'timetable.csv'
f=open(path, mode='w')
f.write("時刻,平日,土曜,日曜祝日\r")
for h in sorted(rows.keys(), key=int):
entries = []
for m in rows[h]:
entries += [m]
f.write(' '.join([h] + entries)+"\r")
print(' '.join([h] + entries))
f.close()
diagram(url,timetable1,diagramTable1,diagramTable3,diagramTable3)
diagram(url,timetable2,diagramTable4,diagramTable5,diagramTable6)
#
# htmlには平日、土曜、日曜祝日で6個の時刻表がある
#
#平日 id=d_0_0 dl=dl_0
#土曜 id=d_0_1 dl=dl_1
#日曜祝日 id=d_0_2 dl=dl_2
#情報はdl内にある
#時刻は<dt></dt>
#分は div [style*="underline"]
#行先はdiv class=arrive_station_name