質問編集履歴

1

ソースコード、エラーコードを更新いたしました。自分の考えも書き込みました。

2016/08/25 12:14

投稿

akakage13
akakage13

スコア89

test CHANGED
File without changes
test CHANGED
@@ -9,6 +9,12 @@
9
9
  1.forで回すのですが、なぜか、1行目だけをprintを続けております。
10
10
 
11
11
  スクリプトは以前、成功したモノと対比しておりますが、2行目以降を読み込まない原因が分からず、苦慮しております。
12
+
13
+
14
+
15
+ **→tds=tr1.findAll("td")に差し替えることで、解決したと考えています。
16
+
17
+ **
12
18
 
13
19
 
14
20
 
@@ -24,7 +30,7 @@
24
30
 
25
31
 
26
32
 
27
- ###試したソースコード、 コードの結果
33
+ ###試したソースコード、 発生したエラーコードの結果
28
34
 
29
35
 
30
36
 
@@ -44,7 +50,7 @@
44
50
 
45
51
  f = codecs.open('race.csv', 'w', 'utf-8')
46
52
 
47
- f.write('frame_number,horse_number,horse_name,sex_age,weight,jockey_name,horse_house,horse_weight,horse_odds,popularity'+u"\n")
53
+ #f.write('frame_number,horse_number,horse_name,sex_age,weight,jockey_name,horse_house,horse_weight,horse_odds,popularity'+u"\n")
48
54
 
49
55
 
50
56
 
@@ -56,49 +62,73 @@
56
62
 
57
63
 
58
64
 
59
- tr_arr = soup.select("table.race_table_old > tr > td")
65
+ tr_arr = soup.select(" table.race_table_old > tr ")
66
+
67
+ #ソースコードは確認済みです
68
+
69
+ for tr1 in tr_arr:
70
+
71
+
72
+
73
+ tds=tr1.findAll("td")
74
+
75
+
76
+
77
+ frame_number=tds[0].text
78
+
79
+ #list型であることは確認済みです
80
+
81
+
82
+
83
+ print frame_number.strip()
60
84
 
61
85
 
62
86
 
63
- for tr in tr_arr:
64
87
 
65
- time.sleep(1)
66
88
 
67
- tds=tr_arr
89
+ ・エラーメッセージ
68
90
 
69
- frame_number=tds[0].text
70
91
 
71
- horse_number=tds[1].text
72
92
 
73
- horse_name=tds[2].text
93
+ C:\Users\satoru\horse>test_race-scan.py
74
94
 
75
- sex_age=tds[3].text
95
+ Traceback (most recent call last):
76
96
 
77
- weight=tds[4].text
97
+ File "C:\Users\satoru\horse\test_race-scan.py", line 20, in <module>
78
98
 
79
- weight=tds[5].text
99
+ frame_number=tds[0].text
80
100
 
81
- jockey_name=tds[6].text
101
+ IndexError: list index out of range
82
102
 
83
- horse_house=tds[7].text
84
103
 
85
- horse_odds=tds[9].text
86
104
 
87
- popularity=tds[10].text
105
+ C:\Users\satoru\horse>
88
106
 
89
- popularity=tds[11].text
107
+
108
+
109
+
90
110
 
91
111
 
92
112
 
93
- print frame_number.strip(),horse_number.strip(),horse_name.strip(),sex_age.strip(),weight.strip(),jockey_name.strip(),horse_house.strip(),horse_weight.strip(),horse_odds.strip(),popularity.strip()
94
-
95
- cols = [frame_number,horse_number,horse_name,sex_age,weight,jockey_name,horse_house,horse_weight,horse_odds,popularity]
96
-
97
- f.write(",".join(cols) + "\n")
113
+ ```
98
114
 
99
115
 
100
116
 
101
- f.close()
117
+ ###試したこと
118
+
119
+ findAllを用いて、for文で回す以前に、スクレイピング自体にエラーが発生しました。
120
+
121
+
122
+
123
+ 該当ソースコードを確認して、tbodyが無いこと、リスト型であること等を踏まえたうえで、
124
+
125
+ 前回のソースコードを参考にスクリプトを考えましたが、うまくいきません。
126
+
127
+ tds単独でprintさせた場合は、一斉に、tdが放出されますので、この部分のスクリプトは大丈夫と考えております。
128
+
129
+
130
+
131
+ **リスト型であるはずなのに、数字が違うということがうまく理解できません。**
102
132
 
103
133
 
104
134
 
@@ -106,55 +136,7 @@
106
136
 
107
137
 
108
138
 
109
-
110
-
111
-
112
-
113
-
114
-
115
-
116
-
117
-
118
-
119
- C:\Users\satoru\horse>test_race-scan.py
120
-
121
- 1 1 プロセッコ 牝2 小野寺 土田 398(-8) 351.4 17 2
122
-
123
- 1 1 プロセッコ 牝2 小野寺 土田 398(-8) 351.4 17 2
124
-
125
- 1 1 プロセッコ 牝2 小野寺 土田 398(-8) 351.4 17 2
126
-
127
- 1 1 プロセッコ 牝2 小野寺 土田 398(-8) 351.4 17 2
128
-
129
- 1 1 プロセッコ 牝2 小野寺 土田 398(-8) 351.4 17 2
130
-
131
- 1 1 プロセッコ 牝2 小野寺 土田 398(-8) 351.4 17 2
132
-
133
- 1 1 プロセッコ 牝2 小野寺 土田 398(-8) 351.4 17 2
134
-
135
- 1 1 プロセッコ 牝2 小野寺 土田 398(-8) 351.4 17 2
136
-
137
- 1 1 プロセッコ 牝2 小野寺 土田 398(-8) 351.4 17 2
138
-
139
- 1 1 プロセッコ 牝2 小野寺 土田 398(-8) 351.4 17 2
140
-
141
- 1 1 プロセッコ 牝2 小野寺 土田 398(-8) 351.4 17 2
142
-
143
- 1 1 プロセッコ 牝2 小野寺 土田 398(-8) 351.4 17 2
144
-
145
- ```
146
-
147
-
148
-
149
- ###試したこと
150
-
151
- インデントも確認しましたし、ソースコードも確認しましたが、原因が分かりません。
152
-
153
- 最後の"2"の数字も、どこの数字なのか不明でございます。
154
-
155
- 併せて、
156
-
157
- 御教示よろしくお願いいたします。
139
+ **御教示よろしくお願いいたします。**
158
140
 
159
141
 
160
142