iT邦幫忙

0

python網路爬取資料發生錯誤重新再試成功

  • 分享至 

  • xImage

我用python在網路爬取資料時發生錯誤重新再試就會成功,請教各位前輩先進為甚麼會這樣。以下是我的程式碼:

import requests
import bs4
from bs4 import BeautifulSoup
import pandas as pd
import time  # 引入time
import sys
import os
import numpy as np

# 將時間元組轉換成想要的字串
timeString = time.strftime("%d%H")
yeardf = int(timeString[0:4])
yeardf1 = int(yeardf-1911)
frames = []
frames1 = []
datble = []


for i in range(99,1767):
  ndf = pd.read_excel("D:/python/board/whole.xlsx", usecols=["code"])
  fndf = int(ndf.at[i, "code"])
  print(fndf)
  for month in range(1,6):
      headers = {"User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36"}
      payload = {'encodeURIComponent': 1,
                       'step': 1,
                       'firstin': 1,
                       'off': 1,
                       'queryName': 'co_id',
                       'inpuType': 'co_id',
                       'TYPEK': 'all',
                       'isnew': 'false',
                       'co_id': fndf,
                       'year': 112,
                       'month': month, }
      res = requests.post("https://mops.twse.com.tw/mops/web/stapap1", params=payload, headers={'Connection':'close'})
      soup = bs4.BeautifulSoup(res.text, "html.parser")
      data = soup.find_all('table')
      data1 = soup.find('h3')
      if data1 == None:
        df = len(data)
        dtable = soup.select('table')[int(df-2)]
      else:
        df = len(data)
        dtable = soup.select('table')[int(df-3)]
      df = pd.read_html(dtable.prettify())
      dfs = pd.DataFrame(np.concatenate(df))
      newdata = dfs.iat[6, 1]
      print(newdata)
      frames.append(newdata)
  result = pd.DataFrame(frames, columns=["code"])
  frames.clear()
  data1 = result.at[0, "code"]
  data2 = result.at[1, "code"]
  data3 = result.at[2, "code"]
  data4 = result.at[3, "code"]
  data5 = result.at[4, "code"]
  if data2>=data1 and data3>=data2 and data4>data3 and data5>data4:
        frames1.append(fndf)
        print("pocketstock="+str(frames1))
        result1 = pd.DataFrame(frames1)
        result1.to_excel("D:/python/board/"+timeString+".xlsx", index = False)
  time.sleep(20)
IndexError: index 1 is out of bounds for axis 0 with size 1

以上的錯誤只是其中之一,重新再試就會成功。
謝謝各位前輩先進的指教。感恩。

pickuse iT邦新手 3 級 ‧ 2023-07-05 10:45:16 檢舉
感覺你程式碼運行的時候有跑到陣列外面,你要不要提供範例 Excel 檔方便我們測試?
joseph iT邦新手 5 級 ‧ 2023-07-05 18:45:27 檢舉
pickuse
以下是我的excel
code
0 1101
1 1102
2 1103
3 1104
4 1108
5 1109
6 1110
7 1201
8 1203
9 1210
10 1213
11 1215
12 1216
13 1217
14 1218
15 1219
16 1220
17 1225
18 1227
19 1229
20 1231
21 1232
22 1233
23 1234
24 1236
25 1240
26 1256
27 1259
28 1264
29 1268
30 1301
31 1303
32 1304
33 1305
34 1307
35 1308
36 1309
37 1310
38 1312
39 1313
40 1314
41 1315
42 1316
43 1319
44 1321
45 1323
46 1324
47 1325
48 1326
49 1336
50 1337
51 1338
52 1339
53 1340
54 1341
55 1342
56 1402
57 1409
58 1410
59 1413
60 1414
61 1416
62 1417
63 1418
64 1419
65 1423
66 1432
67 1434
68 1436
69 1437
70 1438
71 1439
72 1440
73 1441
74 1442
75 1443
76 1444
77 1445
78 1446
79 1447
80 1449
81 1451
82 1452
83 1453
84 1454
85 1455
86 1456
87 1457
88 1459
89 1460
90 1463
91 1464
92 1465
93 1466
94 1467
95 1468
96 1470
97 1471
98 1472
99 1473
100 1474
101 1475
102 1476
103 1477
104 1503
105 1504
106 1506
107 1512
108 1513
109 1514
110 1515
111 1516
112 1517
113 1519
114 1521
115 1522
116 1524
117 1525
118 1526
119 1527
120 1528
121 1529
122 1530
123 1531
124 1532
125 1533
126 1535
127 1536
128 1537
129 1538
130 1539
131 1540
132 1541
133 1558
134 1560
135 1565
136 1568
137 1569
138 1570
139 1580
140 1582
141 1583
142 1584
143 1586
144 1587
145 1589
146 1590
147 1591
148 1593
149 1595
150 1597
151 1598
152 1599
153 1603
154 1604
155 1605
156 1608
157 1609
158 1611
159 1612
160 1614
161 1615
162 1616
163 1617
164 1618
165 1626
166 1701
167 1702
168 1707
169 1708
170 1709
171 1710
172 1711
173 1712
174 1713
175 1714
176 1717
177 1718
178 1720
179 1721
180 1722
181 1723
182 1725
183 1726
184 1727
185 1730
186 1731
187 1732
188 1733
189 1734
190 1735
191 1736
192 1737
193 1742
194 1752
195 1760
196 1762
197 1773
198 1776
199 1777
200 1781
201 1783
202 1784
203 1785
204 1786
205 1788
206 1789
207 1795
208 1796
209 1799
210 1802
211 1805
212 1806
213 1808
214 1809
215 1810
216 1813
217 1815
218 1817
219 1903
220 1904
221 1905
222 1906
223 1907
224 1909
225 2002
226 2006
227 2007
228 2008
229 2009
230 2010
231 2012
232 2013
233 2014
234 2015
235 2017
236 2020
237 2022
238 2023
239 2024
240 2025
241 2027
242 2028
243 2029
244 2030
245 2031
246 2032
247 2033
248 2034
249 2035
250 2038
251 2049
252 2059
253 2061
254 2062
255 2063
256 2064
257 2065
258 2066
259 2067
260 2069
261 2070
262 2101
263 2102
264 2103
265 2104
266 2105
267 2106
268 2107
269 2108
270 2109
271 2114
272 2115
273 2201
274 2204
275 2206
276 2207
277 2208
278 2211
279 2221
280 2227
281 2228
282 2230
283 2231
284 2233
285 2235
286 2236
287 2239
288 2241
289 2243
290 2247
291 2250
292 2301
293 2302
294 2303
295 2305
296 2308
297 2312
298 2313
299 2314
300 2316
301 2317
302 2321
303 2323
304 2324
305 2327
306 2328
307 2329
308 2330
309 2331
310 2332
311 2337
312 2338
313 2340
314 2342
315 2344
316 2345
317 2347
318 2348
319 2349
320 2351
321 2352
322 2353
323 2354
324 2355
325 2356
326 2357
327 2358
328 2359
329 2360
330 2362
331 2363
332 2364
333 2365
334 2367
335 2368
336 2369
337 2371
338 2373
339 2374
340 2375
341 2376
342 2377
343 2379
344 2380
345 2382
346 2383
347 2385
348 2387
349 2388
350 2390
351 2392
352 2393
353 2395
354 2397
355 2399
356 2401
357 2402
358 2404
359 2405
360 2406
361 2408
362 2409
363 2412
364 2413
365 2414
366 2415
367 2417
368 2419
369 2420
370 2421
371 2423
372 2424
373 2425
374 2426
375 2427
376 2428
377 2429
378 2430
379 2431
380 2433
381 2434
382 2436
383 2438
384 2439
385 2440
386 2441
387 2442
388 2443
389 2444
390 2449
391 2450
392 2451
393 2453
394 2454
395 2455
396 2457
397 2458
398 2459
399 2460
400 2461
401 2462
402 2464
403 2465
404 2466
405 2467
406 2468
407 2471
408 2472
409 2474
410 2476
411 2477
412 2478
413 2480
414 2481
415 2482
416 2483
417 2484
418 2485
419 2486
420 2488
421 2489
422 2491
423 2492
424 2493
425 2495
426 2496
427 2497
428 2498
429 2501
430 2504
431 2505
432 2506
433 2509
434 2511
435 2514
436 2515
437 2516
438 2520
439 2524
440 2527
441 2528
442 2530
443 2534
444 2535
445 2536
446 2537
447 2538
448 2539
449 2540
450 2542
451 2543
452 2545
453 2546
454 2547
455 2548
456 2596
457 2597
458 2601
459 2603
460 2605
461 2606
462 2607
463 2608
464 2609
465 2610
466 2611
467 2612
468 2613
469 2614
470 2615
471 2616
472 2617
473 2618
474 2630
475 2633
476 2634
477 2636
478 2637
479 2640
480 2641
481 2642
482 2643
483 2645
484 2701
485 2702
486 2704
487 2705
488 2706
489 2707
490 2712
491 2718
492 2719
493 2722
494 2723
495 2724
496 2726
497 2727
498 2729
499 2731
500 2732
501 2734
502 2736
503 2739
504 2740
505 2743
506 2745
507 2748
508 2752
509 2753
510 2754
511 2755
512 2756
513 2801
514 2809
515 2812
516 2816
517 2820
518 2832
519 2834
520 2836
521 2838
522 2845
523 2849
524 2850
525 2851
526 2852
527 2855
528 2867
529 2880
530 2881
531 2882
532 2883
533 2884
534 2885
535 2886
536 2887
537 2888
538 2889
539 2890
540 2891
541 2892
542 2897
543 2901
544 2903
545 2904
546 2905
547 2906
548 2908
549 2910
550 2911
551 2912
552 2913
553 2915
554 2916
555 2923
556 2924
557 2926
558 2929
559 2937
560 2939
561 2945
562 2947
563 3002
564 3003
565 3004
566 3005
567 3006
568 3008
569 3010
570 3011
571 3013
572 3014
573 3015
574 3016
575 3017
576 3019
577 3021
578 3022
579 3023
580 3024
581 3025
582 3026
583 3027
584 3028
585 3029
586 3030
587 3031
588 3032
589 3033
590 3034
591 3035
592 3036
593 3037
594 3038
595 3040
596 3041
597 3042
598 3043
599 3044
600 3045
601 3046
602 3047
603 3048
604 3049
605 3050
606 3051
607 3052
608 3054
609 3055
610 3056
611 3057
612 3058
613 3059
614 3060
615 3062
616 3066
617 3071
618 3078
619 3081
620 3083
621 3085
622 3086
623 3088
624 3089
625 3090
626 3092
627 3093
628 3094
629 3095
630 3105
631 3114
632 3115
633 3118
634 3122
635 3128
636 3130
637 3131
638 3138
639 3141
640 3147
641 3149
642 3152
643 3162
644 3163
645 3164
646 3167
647 3169
648 3171
649 3176
650 3178
651 3188
652 3189
653 3191
654 3202
655 3205
656 3206
657 3207
658 3209
659 3211
660 3213
661 3217
662 3218
663 3219
664 3221
665 3224
666 3227
667 3228
668 3229
669 3230
670 3231
671 3232
672 3234
673 3236
674 3252
675 3257
676 3259
677 3260
678 3264
679 3265
680 3266
681 3268
682 3272
683 3276
684 3284
685 3285
686 3287
687 3288
688 3289
689 3290
690 3293
691 3294
692 3296
693 3297
694 3303
695 3305
696 3306
697 3308
698 3310
699 3311
700 3312
701 3313
702 3317
703 3321
704 3322
705 3323
706 3324
707 3325
708 3332
709 3338
710 3339
711 3346
712 3349
713 3354
714 3356
715 3357
716 3360
717 3362
718 3363
719 3372
720 3373
721 3374
722 3376
723 3379
724 3380
725 3388
726 3390
727 3402
728 3406
729 3413
730 3416
731 3419
732 3426
733 3430
734 3432
735 3434
736 3437
737 3438
738 3441
739 3443
740 3444
741 3447
742 3450
743 3454
744 3455
745 3465
746 3466
747 3479
748 3481
749 3483
750 3484
751 3489
752 3490
753 3491
754 3492
755 3494
756 3498
757 3499
758 3501
759 3504
760 3508
761 3511
762 3512
763 3515
764 3516
765 3518
766 3520
767 3521
768 3522
769 3523
770 3526
771 3527
772 3528
773 3529
774 3530
775 3531
776 3532
777 3533
778 3535
779 3537
780 3540
781 3541
782 3543
783 3545
784 3546
785 3548
786 3550
787 3551
788 3552
789 3555
790 3556
791 3557
792 3558
793 3563
794 3564
795 3567
796 3570
797 3576
798 3577
799 3580
800 3581
801 3583
802 3587
803 3588
804 3591
805 3592
806 3593
807 3594
808 3596
809 3597
810 3605
811 3607
812 3609
813 3611
814 3615
815 3617
816 3622
817 3623
818 3624
819 3625
820 3628
821 3629
822 3630
823 3631
824 3632
825 3645
826 3646
827 3652
828 3653
829 3661
830 3663
831 3664
832 3665
833 3666
834 3669
835 3672
836 3673
837 3675
838 3679
839 3680
840 3682
841 3684
842 3685
843 3686
844 3687
845 3689
846 3691
847 3693
848 3694
849 3701
850 3702
851 3703
852 3704
853 3705
854 3706
855 3707
856 3708
857 3709
858 3710
859 3711
860 3712
861 3713
862 3714
863 3715
864 4102
865 4104
866 4105
867 4106
868 4107
869 4108
870 4109
871 4111
872 4113
873 4114
874 4116
875 4119
876 4120
877 4121
878 4123
879 4126
880 4127
881 4128
882 4129
883 4130
884 4131
885 4133
886 4137
887 4138
888 4139
889 4142
890 4147
891 4148
892 4153
893 4154
894 4155
895 4157
896 4160
897 4161
898 4162
899 4163
900 4164
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

1 個回答

0
obarisk
iT邦研究生 1 級 ‧ 2023-07-08 22:02:11

幾個建議

  • 檢查 request 的結果碼。如果失敗-> 重試或是丟出錯誤
  • 檢查 資料讀取出來的維度。如果是空資料-> 重試或是丟出錯誤

index error 應該是在取資料子集時被拋出的,如果有時可以有時不行,大概就以上兩種可能了。

不想檢查錯誤,就只能寫一堆 try catch 了

我要發表回答

立即登入回答