###前提・実現したいこと
python初心者でございます。
競馬情報をbeautifulsoupでスクレイピングしておりますが、以下の3点に苦慮しております。
1.forで回すのですが、なぜか、1行目だけをprintを続けております。
スクリプトは以前、成功したモノと対比しておりますが、2行目以降を読み込まない原因が分からず、苦慮しております。
**→tds=tr1.findAll("td")に差し替えることで、解決したと考えています。
**
2.項目の中の「負担重量」をスクレイピングすることが出来ません(他は成功しております)
単純にtd.textと思いますが、何故か、取れません。
3.右端の2の数字の出所も不明でございます。
###試したソースコード、 発生したエラーコードの結果
# -*- coding:utf-8 -*- import urllib2 import codecs import time from bs4 import BeautifulSoup f = codecs.open('race.csv', 'w', 'utf-8') #f.write('frame_number,horse_number,horse_name,sex_age,weight,jockey_name,horse_house,horse_weight,horse_odds,popularity'+u"\n") url='http://race.netkeiba.com/?pid=race_old&id=c201604020801' soup = BeautifulSoup(urllib2.urlopen(url).read(),"lxml") tr_arr = 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 <module> 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件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2016/08/25 12:17
2016/08/25 12:54
2016/08/25 12:59 編集
2016/08/26 11:51
2016/08/26 12:28
2016/08/27 11:03