質問: soup.select(" table.race_table_old > tr ") #ソースコードは確認済みです for tr1 in tr_arr: tds=tr1.findAll("td") frame_number=tds[0].text #list型であることは確認済みです print frame_number.strip() ・エラーメッセージ C:\Users\satoru\horse>test_race-scan.py Traceback (most recent call last): File "C:\Users\satoru\horse\test_race-scan.py", line 20, in frame_number=tds[0].text IndexError: list index out of range C:\Users\satoru\horse> ``` ### 試したこと findAllを用いて、for文で回す以前に、スクレイピング自体にエラーが発生しました。 該当ソースコードを確認して、tbodyが無いこと、リスト型であること等を踏まえたうえで、 前回のソースコードを参考にスクリプトを考えましたが、うまくいきません。 tds単独でprintさせた場合は、一斉に、tdが放出されますので、この部分のスクリプトは大丈夫と考えております。 **リスト型であるはずなのに、数字が違うということがうまく理解できません。** **御教示よろしくお願いいたします。** ### 補足情報(言語/FW/ツール等のバージョンなど) python2.7
回答: > > 1. forで回すのですが、なぜか、1行目だけをprintを続けております。 > > > ここで、毎回同じものを`tds`に代入しているからですね。 ``` for tr in tr_arr: time.sleep(1) tds=tr_arr ``` それに、`tr_arr = soup.select("table.race_table_old > tr > td")`の最後が`td`なのはおかしくないですか? この方法は、機種名や血統情報などの項目をひとつだけ取得する時のものだったはずです。 正しい方法は、 の時とほとんど同じことをすれば良いはずです。 上記の質問のコードと今回のコードをもう一度よく比べてみて下さい。 2と3は、1を直せば上手く行くと思います。 但し、掲載していただいたコードは、変数がダブっていたり足りなかったりして乱れているので、 再度掲載する場合はそれを修正してください。