質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.49%
Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

1回答

2109閲覧

pythonとBeautifulsoupで競馬情報をスクレイピングする中で、十分に間隔をおいているのに、途中でエラーが出てしまい、苦慮しております!

akakage13

総合スコア89

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2017/06/02 11:57

netkeiba.com様のサイトから
python2.7とBeautifulsoupで競馬情報をスクレイピングする中で、十分に間隔をおいているのに、途中でエラーが出てしまい、苦慮しております!

# -*- coding:utf-8 -*- import urllib2 import codecs import time import random from bs4 import BeautifulSoup f = codecs.open('h2007_1.csv', 'w', 'utf-8') f.write('win_ratio_2,one,two,three,four,value_one,value_two,value_three,value_four,wide_ratio,horse_name_2,horse_name_3,birth,win_ratio,f_horse_name,m_horse_name,ff_horse_name,fm_horse_name,mf_horse_name,mm_horse_name,race_date,kaisai,weather,race_number,race_name,tousuu,horse_number,horse_arrival,kinryo,distance,baba,race_time,difference,nobori,horse_weight,prize'+u"\n") horse_name = "" start_url = 'http://db.netkeiba.com/horse/2007100{0}/' for i in xrange(1,1000): url = start_url.format(i) soup = BeautifulSoup(urllib2.urlopen(url).read(), "lxml") time.sleep(random.uniform(5,10)) horse_name_tag = soup.find('div', {'class': 'horse_title'}) 以下 省略

上記のソースコードで、順調に読み込んでいるのですが、途中、突如として、以下のようなエラーが発生してしまいます。

4-10-17-161 0 0 0 0 0 0 0 0 0 □地スイセンキョウ 牝 鹿毛 2007年4月28日 192戦4勝 [4-10-17-161] デザ ートストーリー スキャニングジョイ Green Desert Aliysa スキャン ミスマルシゲ 2012/04/14 高知 晴 C3 ー3 8 3 5 54 ダ1400 不 1:36.9 2.1 43.1 393(+2) 0.5 4-10-17-161 0 0 0 0 0 0 0 0 0 □地スイセンキョウ 牝 鹿毛 2007年4月28日 192戦4勝 [4-10-17-161] デザ ートストーリー スキャニングジョイ Green Desert Aliysa スキャン ミスマルシゲ 2012/04/01 高知 晴 C3 ー3 8 7 7 54 ダ1300 不 1:28.9 3.3 41.6 391(+5) 4-10-17-161 0 0 0 0 0 0 0 0 0 □地スイセンキョウ 牝 鹿毛 2007年4月28日 192戦4勝 [4-10-17-161] デザ ートストーリー スキャニングジョイ Green Desert Aliysa スキャン ミスマルシゲ 2012/03/26 高知 晴 島崎 遥香生誕記念特別 10 3 6 54 ダ1300 重 1:28.4 2.4 42.2 386(-5) 4-10-17-161 0 0 0 0 0 0 0 0 0 □地スイセンキョウ 牝 鹿毛 2007年4月28日 192戦4勝 [4-10-17-161] デザ ートストーリー スキャニングジョイ Green Desert Aliysa スキャン ミスマルシゲ 2012/03/18 高知 曇 C2 ー6 9 1 6 53 ダ1400 不 1:35.3 1.7 40.8 391(+4) 4-10-17-161 0 0 0 0 0 0 0 0 0 □地スイセンキョウ 牝 鹿毛 2007年4月28日 192戦4勝 [4-10-17-161] デザ ートストーリー スキャニングジョイ Green Desert Aliysa スキャン ミスマルシゲ 2012/03/03 高知 晴 おや じダービー賞特別 10 5 9 54 ダ1300 不 1:31.2 4.2 44.8 387(-5) 4-10-17-161 0 0 0 0 0 0 0 0 0 □地スイセンキョウ 牝 鹿毛 2007年4月28日 192戦4勝 [4-10-17-161] デザ ートストーリー スキャニングジョイ Green Desert Aliysa スキャン ミスマルシゲ 2012/02/27 高知 晴 C2ロ 12 2 7 54 ダ1300 重 1:31.1 3.6 42.6 392(+4) Traceback (most recent call last): File "C:\Users\satoru\horse\horse\2007\horse_scan_2007_1.py", line 91, in <module> nobori=tds[22].text IndexError: list index out of range

上記のように、1000行めまでは、順調に読み込んでおりますので、ソースコードのエラーとは考えにくいと考えております。

しかしながら、上記のエラーメッセージは、nobori の数値が見つからないとのメッセージでありまして、

拾えるはずの、数値に対して、エラーメッセージが出ること自体に、とても疑問を感じております。

確かに、エラーメッセージを出した スイセンキョウ という馬は、競走成績データが多いとは思いますが、

攻撃ではない、間隔をおいて、スクレイピングをさせていただいているつもりでございます。

また、この馬のデータの中間地点あたりで、エラーが出るのも、区切りが悪く、エラーの原因の予想がつかない一つの原因となっております。

何回、トライしても、上記の、同じ箇所でエラーになります。

ソースコードのエラーとは考えにくい、このエラーに、非常に苦慮しております。

先輩方の、御教示をよろしくお願いいたします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

毎回同じところでエラーが出ているのなら単純にデータの問題でしょう。
デバッグ用にprint(tds.text) or print(tds)などして確認してください。

もしかしてエラーが出ているのは
4-10-17-161 0 0 0 0 0 0 0 0 0 □地スイセンキョウ 牝 鹿毛 2007年4月28日 192戦4勝 [4-10-17-161] デザ
ートストーリー スキャニングジョイ Green Desert Aliysa スキャン ミスマルシゲ 2012/02/27 高知 晴 C2ロ
12 2 7 54 ダ1300 重 1:31.1 3.6 42.6 392(+4)
このデータの事でしょうか?

もしそうなら本当にこのデータに対してエラーが出ているのかを確認してください。

投稿2017/06/02 12:03

_Victorique__

総合スコア1392

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

akakage13

2017/06/02 13:03

_victorique_様、御教示、ありがとうございます C:\Users\satoru\horse\horse>horse-scan.py Traceback (most recent call last): File "C:\Users\satoru\horse\horse\horse-scan.py", line 65, in <module> print horse_name.strip(),trainer.strip(),f_horse_name.strip(),m_horse_name.strip(),ff_horse_name .strip(),fm_horse_name.strip(),mf_horse_name.strip(),mm_horse_name.strip(),race_date.strip(),kaisai. strip(),weather.strip(),race_name.strip(),tousuu.strip(),frame_number.strip(),horse_number.strip(),h orse_odds.strip(),popularity.strip(),horse_arrival.strip(),jockey_name.strip(),weight.strip(),distan ce.strip(),baba.strip(),race_time.strip(),difference.strip(),horse_pass.strip(),pace.strip(),nobori. strip(),horse_weight.strip(),win_horse.strip(),prize.strip() UnicodeEncodeError: 'cp932' codec can't encode character u'\xc3' in position 2: illegal multibyte se quence スイセンキョウ 以外の馬名でテストしましたら、うまく動きますが、 http://db.netkeiba.com/horse/2007100135/ スイセンキョウですと、上記のようなエラーメッセージになりました。 この、エラーデータを、どう解釈したらよろしいのでしょうか? 重ねて、御教示よろしくお願いいたします。 
_Victorique__

2017/06/02 13:51

えーっと、質問のエラーとは違いますが、コードを追加してエラーが出たのでしたらどのようなコードを追加されたのか教えていただけますか?
tmp

2017/06/02 14:23

漢字コード違い?でエラーになっていませんか?
akakage13

2017/06/02 23:32

_Victorique_様、tmp様、御教示ありがとうございます。 いろいろ、試させていただきましたが、うまく動きません。 もう少し、詳しく申し上げたいことがございますので、 一旦、ここで失礼させていただきまして、別立てで、新しく御質問させていただこうと思います。 新しい質問がを上げさせて頂いた際には、御教示、よろしくお願いいたします。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.49%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問