リブログ記事”webに表示されているnavitimeのバス時刻表を平日、土曜、日曜祝日まとめて文書を作って”
どうもAIの挙動がおかしいAIの出力したデータを確認するのは気に食わないので、自分で作ってみましたnavitimeのhtmlにちょっと癖がありますデータはxmlがいいですねAIは時刻表のhtmlタグ構成を完全に把握できていないみたいですnavitimeから時刻表をcsvで取り込めます。後はEXCELで調整URLを変更するだけです。たぶんどこの時刻表も取得できると思いますBeautifulSoupで簡単にhtmlの要素が取れるので超便利です。from bs4 import BeautifulSoupimport urllib.requestimport 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