##実現したいこと
JR東日本の中央本線の遅延情報をスクレイピングしたい。
遅延情報はhtmlの<table>属性で書かれているため、それをスクレイピングしてCSVファイルにしたいが、タグが破損しているため、Pandasのhtml_read()を使えず、BeautifulSoup4でCSVファイル化しようにも、テーブルの要素をすべて取得できないためかなわず。
そこで、自力でhtmlファイルを修復するプログラムを考えている。
具体的には、<tr>---</tr>が終了タグ</tr>しかないため</tr>の後ろに<tr>をつけて、しっかりテーブルの行要素をタグで囲ってBeautifulSoup4で取得できるようにしたい。
発生している問題・エラーメッセージ
まず最初に、htmlソースコードを文字列化して、</tr>のインデックスを確かめたい
そのために、</tr>が文字列中に何回登場するかを計算した。
JR東日本は過去45日分の遅延情報を載せているが、プログラムコード結果は2回であった。
どこがおかしいのか、また、このような原因を自力で発掘するアイデア等があればぜひ教えていただきたいです。初心者の質問であるため、不勉強や説明不足等があれば申し訳ありません。
Python
1from bs4 import BeautifulSoup 2from urllib.request import urlopen 3 4#サイトを取り入れる 5site=urlopen('https://traininfo.jreast.co.jp/delay_certificate/history.aspx?R=06') 6 7html=BeautifulSoup(site,'lxml') 8table=html.find_all('table')[0] #HTMLソースコードを文字列化して<table>部分だけ回収する 9k=str(table) 10cnt=0 #<table>中にある</tr>の個数 11l=0 #文字列の左から数えて</tr>が何番目か 12while '</tr>' in k: 13 l=k.find('</tr>') 14 l+=5 #</tr>分だけ右にずらす 15 k=k[l:] 16 cnt+=1 17 18#実行部 19print(cnt)
回答3件
あなたの回答
tips
プレビュー