<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />私はウェブサイトからスポーツのデータを(合法的に)インポートしようとしています(例:2012年ロンドンパラリンピックの結果)。公開サイトはIPCデータベースにクエリを送信し、次の組み合わせに応じて多数のテーブルを含むHTMLでページを返します。競争(ロンドンパラリンピック)。スポーツ(陸上競技)性別(F);イベント(100m) AWDクラス(F37)これは競技の各ステージ(ヒート/セミファイナル/ファイナル)とヒートナンバーのための別々のテーブルを含みます。イベントごとに約20のAWDクラスがあり、イベントの人気に応じて、通常1ページあたり<20のテーブルがあります。JMPでこれを部分的に自動化するために、約360(= 20 x 18) "Open"という形式のスクリプトを使用します。
開いた(
「 http://www.paralympic.org/ipc_results/results.php?competition=2004PG&gender=m&sport=athletics&discipline=&event=100%20m&eclass=T11 "、
HTMLテーブル(3)
;
男性用100m F11(盲目)グループ用(ページの3番目の表)。次に、これをすべてのイベントに対して繰り返すことによって作成されたテーブルを連結します。私の問題は、このプロセスはクラスあたり20のテーブルを可能にするスクリプトに対してはうまくいくということです(上記のステートメントのうちの20を連結する)。18個すべてのイベント(360 = 20 x 18)を含めようとすると、最初のイベント(100mなど)の後に実行がエラーなしで停止し、次のイベント(200m)の出力が生成されません。これは、このイベント/クラスの組み合わせに含まれるテーブルが12個しかないためです(そうは思わない)、またはその他の問題がありますか?(私はWinXPを実行している、16コアのRAMを搭載した4コア、64ビットPCを使用しています)。
Web上で「インターネットオープン」の選択を使用した経験のある人からのアドバイスをいただければ幸いです。
なぜそれが壊れるのか私にはわかりませんが、リクエスト数が多いとネットワーク接続が遅くなるためかもしれません。あるいは、要求が別の理由で失敗するということです。
すべてのテーブルを一度に連結するのか、それとも一度に1つずつ連結する(それからソーステーブルを閉じる)のでしょうか。後者の方法はあなたのコンピュータからの要求が少ないです。
以下のコードは、イベントリストが例の2つのイベントをはるかに超えて展開されている場合でも機能するようです(私はMac用のJMP 10を使用し、かなり速いネットワーク接続を持っています)。1ページあたりのテーブル数が20未満の場合の停止を避けるために、Try()を使用しました。
dt = 新しいテーブル ( 「すべての結果」 、新しいコラム ( 「ソース表」 、キャラクター ) ) ;
event_list = { "100" 、 "400" } ; //この例では2つのイベントのみ
にとって ( 私 = 1 、私 <= N個のアイテム ( event_list ) 、私 ++、
やってみる ( //このイベントにテーブルがもうない場合はループをエスケープする
にとって ( j = 1 、 j <= 20 、 j ++、
//(Close(dt1、保存しない))を試してください。//前のサブテーブルを閉じます(もしあれば)
dt1 = 開いた (
「 http://www.paralympic.org/ipc_results/results.php?competition=2004PG&gender=m&sport=athletics&discipline=&event= 「
|| event_list [ 私 ] || "%20m&eclass = T11" 、
HTMLテーブル ( j )
) ;
待つ ( 0 ) ; // JMPにダウンロードを完了する機会を与え、ネットワークが遅い場合は引数を増やす
dt1 << セット名 ( event_list [ 私 ] || "_表" || チャー ( j ) ) ;
コル = dt1 << 新しいコラム ( 「ソース表」 、キャラクター ) ;
各行について ( dt1 : コル = ( dt1 << 名前をつける ) ) ;
dt << 連結する ( dt1 、最初の表に追加 ( 1 ) ) ;
閉じる ( dt1 、保存しない ) ; //サブテーブルを閉じる
)
)
) ;