Unlock a world of possibilities! Login now and discover the exclusive benefits awaiting you.
初めて投稿します山崎です。
Webページのテーブルを複数ページ取得しようとしていますが、ページによっては
'@4'、'@5'が無い場合があり、存在しない場合にエラーハンドリングしたいのですがどうすればいいですか?
IsNullでは判定できない。(現在はエラー無視モードで全件取得可能)
教えてください。よろしくお願いします。
set errormode = 0;
for index = 1011 to 1020
for Each tbl in '@2','@3','@4','@5'
if IsNull(tbl) then
else
[tmp_list]:
LOAD [氏名],
[よみがな],
[所属]
FROM [https://sitename/members/alphabet/$(index)]
(html, utf8, embedded labels, table is $(tbl));
end if
next
next
はじめまして。
ご質問の件ですが、ファイルの種類の選択の際に、Htmlをやめて固定長コードで取得するようにしてみてはどうでしょうか?
Htmlとして取得する場合と違い、ソースを精製する形になるので手間はかかりますが、お困りのケースにも対応が可能です。
この方法だといろんな情報をソースから取得することが可能ですので、一度チャレンジしてみてください。
早々の回答ありがとうございます。
試しに固定長レコードを選んだところ、HTMLソースが表示されました。HTMLソースをパースすることを言われていますか?
本来のURLは、<table>タグで括られた表がページごとに固定の個数ではなく存在しておりそれをページごと
存在チェックしたいのがゴールです。
よろしくお願いします。
おっしゃるとおり、ソースをパースする事をお伝えしておりましたが、HTMLで取得するのであれば、以下の記載内容で取得できるか、一度試してみてください。
set errormode = 0;
for index = 1011 to 1020
for i = 1 to 99 //'99'の部分は適当に最大数を入れておいて下さい
LET tbl = '@'&$(i);
[tmp_list]:
LOAD [氏名],
[よみがな],
[所属]
FROM [https://sitename/members/alphabet/$(index)]
(html, utf8, embedded labels, table is $(tbl));
IF ScriptError = 10 then
exit For
ENDIF
next
next
SET ErrorMode=1;
別のアプローチを提示いただきありがとうございます。
結果はうまくいきませんでした。
最大テーブル数は5個なので、5に変更して実行しましたがエラーが発生します。
エラーの発生ポイントは、存在しない「テーブル」で発生します。
エラーメッセージ:(一部抜粋)
以下のエラーが発生しました:
set errormode = 0;
から、記載されていますか?
はい、記述しています。
途中でエラーが表示されスクリプトは終了します。
これでどうですか?
set errormode = 0;
FOR index = 1011 to 1020
LET Add = chr(91)&'https://sitename/members/alphabet/'&$(index)&chr(93);
FOR i = 1 to 5
LET tbl = '@'&$(i);
[tmp_list]:
LOAD [氏名],
[よみがな],
[所属]
FROM $(Add)
(html, utf8, embedded labels, table is $(tbl));
IF ScriptError = 10 then
exit For
ENDIF
NEXT
NEXT
set errormode = 1;
回答ありがとうございます。
結果は同じエラーが発生します。
FROMの文字列は、正しい形式で取得できています。
エラーから抜粋:
[https://sitename/members/alphabet/1019]
並行して調べているのですが、「@N」がテーブルと仮定して行数1以上とか
やってはみるもののNGなので継続的に調査を続けます。
ありがとうございました。
set errormode = 0;
をセットしているのに、エラーで止まるのが気になりますね。
通常は、そのままエラーを無視して次の処理へと移るのですが・・・・