質問: 実現したいこと ------- JR東日本の中央本線の遅延情報をスクレイピングしたい。 遅延情報はhtmlの属性で書かれているため、それをスクレイピングしてCSVファイルにしたいが、タグが破損しているため、Pandasのhtml_read()を使えず、BeautifulSoup4でCSVファイル化しようにも、テーブルの要素をすべて取得できないためかなわず。 そこで、自力でhtmlファイルを修復するプログラムを考えている。 具体的には、---が終了タグしかないための後ろにをつけて、しっかりテーブルの行要素をタグで囲ってBeautifulSoup4で取得できるようにしたい。 ### 発生している問題・エラーメッセージ まず最初に、htmlソースコードを文字列化して、のインデックスを確かめたい そのために、が文字列中に何回登場するかを計算した。 JR東日本は過去45日分の遅延情報を載せているが、プログラムコード結果は2回であった。 どこがおかしいのか、また、このような原因を自力で発掘するアイデア等があればぜひ教えていただきたいです。初心者の質問であるため、不勉強や説明不足等があれば申し訳ありません。 ![イメージ説明](https://teratail-v2.storage.googleapis.com/uploads/contributed_images/c2956e864701ad6f43cee6bd067c14af.png) 5月1日のデータです。 のタグのみで、開始タグが見当たりません。 ### 該当のソースコード ``` from bs4 import BeautifulSoup from urllib.request import urlopen #サイトを取り入れる site=urlopen('https://traininfo.jreast.co.jp/delay_certificate/history.aspx?R=06') html=BeautifulSoup(site,'lxml') table=html.find_all('table')[0] #HTMLソースコードを文字列化して部分だけ回収する k=str(table) cnt=0 #中にあるの個数 l=0 #文字列の左から数えてが何番目か while '' in k: l=k.find('') l+=5 #分だけ右にずらす k=k[l:] cnt+=1 #実行部 print(cnt) ```
回答: ``` import pandas as pd url = "https://traininfo.jreast.co.jp/delay_certificate/history.aspx?R=06" dfs = pd.read_html(url, flavor="bs4") len(dfs) dfs[0] ``` flavorを変更すればpandasでも読み込めます