dポイントプレゼントキャンペーン実施中!

こんばんは

Document.body.innerTextで取得した内容を1行ずつ配列に格納していきたいのですが、どのようにすればよろしいでしょうか?

FileSystemObjectを用いて、一時的にテキストに取得した内容を書き出し、1行ずつ読み込んで格納していくしかないのでしょうか?

できれば、innerTextで取得した内容を直接格納したいのですが、詳しい方いらっしゃいましたら、アドバイス下さい。

A 回答 (1件)

こんにちは。



内容が唐突過ぎて、ずっとあれこれ考えて、返事がつけられませんでした。

>Document.body.innerTextで取得した内容
と書いていますが、その親オブジェクトは、IEオブジェクトですか?当たり前のようで当たり前でないからです。

それで、innerText では、配列に取るなら、どうやっても、何らかの方法で切り分けるしかないのではないですね。

切り分けるなら、innerHTMLの方が楽ですが、そもそも、Document.bodyのテキストから取り出すというところが問題がないでしょうか。返って煩雑になってしまうのです。さしずめ正規表現を駆使して取り出すというのも、一つのアイデアですが、innerHTMLの方が楽ですが、それも、一考が必要です。

FileSystemObject?
ストリーミングにでもするということでしょうか。

ここまで書いて、終わったら、不完全燃焼ですから、Sample を示しておきます。

ここのサイトのデータを取得する、即席のマクロですが、こんな具合です。なんとなく、イメージが分かりますでしょうか。何かの参考になればとおもいます。配列のbuf に、それぞれのデータを格納します。

 Dim objIE As New InternetExplorer '事前バインディング
 'サイトにアクセスして、その後は、以下の通りです。
 With objIE
   '関係のない変数の宣言は全部省略しました。
   Dim buf(7)
   Set pd = .Document.getElementsByClassName("date")
   b = Replace(pd(0).innerText, "質問日時:", "")
   buf(2) = Format$(b, "yy-MM-dd hh:mm")
   Set pa = .Document.getElementsByClassName("author")
   buf(5) = Replace(pa(0).innerText, "質問者:", "")
   Set pi = .Document.getElementsByTagName("meta")
   For i = 0 To pi.Length 'タイトル
   If pi(i).getAttribute("property") = "og:title" Then buf(3) = pi(i).Content
   Next i
   Set pj = .Document.getElementsByName("good")
   If pj.Length > 0 Then
    buf(6) = pj(0).getAttribute("data-qid") 'id
   Else
    Set pid = .Document.getElementsByClassName("q_only_remark_item")
    Set pid_c = pid(0).ChildNodes
    b = pid_c(1).innerHTML
    buf(6) = val(Mid(b, InStr(1, b, "/question/") + 10))
   End If
   '--続く--
 End With
    • good
    • 1

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!