質問編集履歴

5

追記2にプログラム全体文を書きました.

2019/03/13 07:25

投稿

hiyoko-kun
hiyoko-kun

スコア23

test CHANGED
File without changes
test CHANGED
@@ -112,6 +112,170 @@
112
112
 
113
113
 
114
114
 
115
+ 追記2 プログラム全体文
116
+
117
+ ```Python
118
+
119
+ # coding: UTF-8
120
+
121
+ import urllib.request, urllib.error
122
+
123
+ from bs4 import BeautifulSoup
124
+
125
+ from datetime import datetime
126
+
127
+ import csv
128
+
129
+ import time
130
+
131
+
132
+
133
+ time_flag = True
134
+
135
+
136
+
137
+ # 永久に実行させます
138
+
139
+ while True:
140
+
141
+ # 時間が59分以外の場合は58秒間時間を待機する
142
+
143
+ if datetime.now().minute != 0 or 30:
144
+
145
+ # 59分ではないので1分(58秒)間待機します(誤差がないとは言い切れないので58秒です)
146
+
147
+ continue
148
+
149
+ time.sleep(58)
150
+
151
+
152
+
153
+ # csvを追記モードで開きます→ここでcsvを開くのはファイルが大きくなった時にcsvを開くのに時間がかかるためです
154
+
155
+ f = open('nikkei_heikin.csv', 'a')
156
+
157
+ writer = csv.writer(f, lineterminator='\n')
158
+
159
+
160
+
161
+ # 59分になりましたが正確な時間に測定をするために秒間隔で59秒になるまで抜け出せません
162
+
163
+ while datetime.now().second != 59:
164
+
165
+ # 00秒ではないので1秒待機
166
+
167
+ time.sleep(1)
168
+
169
+
170
+
171
+ # 処理が早く終わり二回繰り返してしまうのでここで一秒間待機します
172
+
173
+ time.sleep(1)
174
+
175
+
176
+
177
+ # csvに記述するレコードを作成します
178
+
179
+ csv_list = []
180
+
181
+
182
+
183
+ # 現在の時刻を年、月、日、時、分、秒で取得します
184
+
185
+ time_ = datetime.now().strftime("%Y/%m/%d %H:%M:%S")
186
+
187
+ # 1カラム目に時間を挿入します
188
+
189
+ csv_list.append(time_)
190
+
191
+
192
+
193
+ # アクセスするURL
194
+
195
+ url = "http://www.nikkei.com/markets/kabu/"
196
+
197
+
198
+
199
+ # URLにアクセスする htmlが帰ってくる → <html><head><title>経済、株価、ビジネス、政治のニュース:日経電子版</title></head><body....
200
+
201
+ html = urllib.request.urlopen(url)
202
+
203
+
204
+
205
+ # htmlをBeautifulSoupで扱う
206
+
207
+ soup = BeautifulSoup(html, "html.parser")
208
+
209
+
210
+
211
+ # span要素全てを摘出する→全てのspan要素が配列に入ってかえされます→[<span class="m-wficon triDown"></span>, <span class="l-h...
212
+
213
+ span = soup.find_all("span")
214
+
215
+
216
+
217
+ # print時のエラーとならないように最初に宣言しておきます。
218
+
219
+ nikkei_heikin = ""
220
+
221
+ # for分で全てのspan要素の中からClass="mkc-stock_prices"となっている物を探します
222
+
223
+ for tag in span:
224
+
225
+ # classの設定がされていない要素は、tag.get("class").pop(0)を行うことのできないでエラーとなるため、tryでエラーを回避する
226
+
227
+ try:
228
+
229
+ # tagの中からclass="n"のnの文字列を摘出します。複数classが設定されている場合があるので
230
+
231
+ # get関数では配列で帰ってくる。そのため配列の関数pop(0)により、配列の一番最初を摘出する
232
+
233
+ # <span class="hoge" class="foo"> → ["hoge","foo"] → hoge
234
+
235
+ string_ = tag.get("class").pop(0)
236
+
237
+
238
+
239
+ # 摘出したclassの文字列にmkc-stock_pricesと設定されているかを調べます
240
+
241
+ if string_ in "mkc-stock_prices":
242
+
243
+ # mkc-stock_pricesが設定されているのでtagで囲まれた文字列を.stringであぶり出します
244
+
245
+ nikkei_heikin = tag.string
246
+
247
+ # 摘出が完了したのでfor分を抜けます
248
+
249
+ break
250
+
251
+ except:
252
+
253
+ # パス→何も処理を行わない
254
+
255
+ pass
256
+
257
+
258
+
259
+ # 摘出した日経平均株価を時間とともに出力します。
260
+
261
+ print (time_, nikkei_heikin)
262
+
263
+ # 2カラム目に日経平均を記録します
264
+
265
+ csv_list.append(nikkei_heikin)
266
+
267
+ # csvに追記敷きます
268
+
269
+ writer.writerow(csv_list)
270
+
271
+ # ファイル破損防止のために閉じます
272
+
273
+ f.close()
274
+
275
+ ```
276
+
277
+
278
+
115
279
  時間がある時にだれか質問に答えていただけると嬉しいです.
116
280
 
117
281
  何卒宜しくお願い致します。

4

追記しました

2019/03/13 07:25

投稿

hiyoko-kun
hiyoko-kun

スコア23

test CHANGED
File without changes
test CHANGED
@@ -100,6 +100,18 @@
100
100
 
101
101
 
102
102
 
103
+ 追記
104
+
105
+ if datetime.now().minute != 0:
106
+
107
+ の時は1時間おきに実行されますが,
108
+
109
+ if datetime.now().minute != 0 or 30:
110
+
111
+ にすると正しく実行されません.
112
+
113
+
114
+
103
115
  時間がある時にだれか質問に答えていただけると嬉しいです.
104
116
 
105
117
  何卒宜しくお願い致します。

3

コメントアウトを修正しました

2019/03/13 07:20

投稿

hiyoko-kun
hiyoko-kun

スコア23

test CHANGED
File without changes
test CHANGED
@@ -36,7 +36,7 @@
36
36
 
37
37
  if datetime.now().minute != 0 or 30:
38
38
 
39
- # 59分ではないので1分(58秒)間待機します(誤差がないとは言い切れないので58秒です)
39
+ # 1分(58秒)間待機します(誤差がないとは言い切れないので58秒です)
40
40
 
41
41
  continue
42
42
 
@@ -52,7 +52,7 @@
52
52
 
53
53
 
54
54
 
55
- # 59分になりましたが正確な時間に測定をするために秒間隔で59秒になるまで抜け出せません
55
+ # 正確な時間に測定をするために秒間隔で59秒になるまで抜け出せません
56
56
 
57
57
  while datetime.now().second != 59:
58
58
 
@@ -88,7 +88,7 @@
88
88
 
89
89
  if datetime.now().minute == 0 or 30:
90
90
 
91
- # 59分ではないので1分(58秒)間待機します(誤差がないとは言い切れないので58秒です)
91
+ # 1分(58秒)間待機します(誤差がないとは言い切れないので58秒です)
92
92
 
93
93
 
94
94
 

2

コメントアウトを修正しました

2019/03/13 07:11

投稿

hiyoko-kun
hiyoko-kun

スコア23

test CHANGED
File without changes
test CHANGED
@@ -32,7 +32,7 @@
32
32
 
33
33
  while True:
34
34
 
35
- # 時間が59分以外の場合は58秒間時間を待機する
35
+ # 時間が0か30分以外の場合は58秒間時間を待機する
36
36
 
37
37
  if datetime.now().minute != 0 or 30:
38
38
 
@@ -84,7 +84,7 @@
84
84
 
85
85
  while True:
86
86
 
87
- # 時間が59分以外の場合は58秒間時間を待機する
87
+ # 時間が0か30分以外の場合は58秒間時間を待機する
88
88
 
89
89
  if datetime.now().minute == 0 or 30:
90
90
 

1

書き方を修正しました.よろしくお願いします.

2019/03/13 07:09

投稿

hiyoko-kun
hiyoko-kun

スコア23

test CHANGED
File without changes
test CHANGED
@@ -1,12 +1,28 @@
1
+ ### 前提・実現したいこと
2
+
3
+
4
+
1
- パイソンで1時間おきにプログラムを実行することはできましたが,30分おきにプログラムを実行することができません
5
+ 30分おきにプログラムを実行したいです.
6
+
7
+
8
+
9
+ ### 発生している問題・エラーメッセージ
10
+
11
+
12
+
13
+ ```
2
14
 
3
15
  エラーメッセージが発生しませんが,30分おきに実行されません.
4
16
 
17
+ ```
5
18
 
6
19
 
20
+
7
- 該当のソースコード Python
21
+ ### 該当のソースコード
8
22
 
9
23
 
24
+
25
+ ```Python
10
26
 
11
27
  time_flag = True
12
28
 
@@ -52,21 +68,27 @@
52
68
 
53
69
 
54
70
 
71
+ ```
55
72
 
56
73
 
57
- 試したこと
58
74
 
59
- if else文で書くとエラーが出ました
75
+ ### したこと
60
76
 
61
-
77
+ ```Pyhton
62
78
 
63
79
  time_flag = True
64
80
 
65
81
 
66
82
 
83
+ # 永久に実行させます
84
+
67
85
  while True:
68
86
 
87
+ # 時間が59分以外の場合は58秒間時間を待機する
88
+
69
89
  if datetime.now().minute == 0 or 30:
90
+
91
+ # 59分ではないので1分(58秒)間待機します(誤差がないとは言い切れないので58秒です)
70
92
 
71
93
 
72
94
 
@@ -74,8 +96,10 @@
74
96
 
75
97
  time.sleep(58)
76
98
 
99
+ ```
100
+
77
101
 
78
102
 
79
103
  時間がある時にだれか質問に答えていただけると嬉しいです.
80
104
 
81
- 登録したばかりですが,何卒宜しくお願い致します。
105
+ 何卒宜しくお願い致します。