[トップページ] / [サンプル一覧へ]

2009-06-02 リンクを全て取り出し、次へのリンクがなくなるまで押す

まぁ初回ってことで、
・URL読み込み後、リンクを全てセルに書き出す。
・次へのリンクを押す。(今回は押さないで、次のページのURLを保存して移動だったけど。)
そんな処理に挑戦してみます。
まぁ、いつものようにドタバタしてます。

仕様書を書かないで、口答で指示を出されることってよくあったりしますよね。
悪い見本だけど、設計書書かないで、こんな感じで作ってと依頼を出してみます。。。。
動画で説明(手抜き)→:http://www.youtube.com/watch?v=-Qe9SN_no88


仕様書・設計書を書けよ、、、って読者の声が聞こえてきたところを強引に続けます。(泥縄式で作成開始。)
※今回のサンプルファイル:[VBA_IE_LINK.zip]←サンプルのxlsが入ってます。。


Document.Links から リンクの情報 を取り出す

まず、テストで 私の動画ページ(youtube) から リンク情報を取り出します。
セルのB3 に
[http://www.youtube.com/profile?user=ken3video&view=videos]
と動画一覧(youtube)のURLをセットします。

.Navigate "URL文字列" で URL表示後、
いつものように、読み込み完了を
.ReadyState が READYSTATE_COMPLETE (4の完了以外)
Or .Busy = True
で、判断します。

次は、リンク情報の取出しです。
Document.Links から リンクの情報を取り出します。
Document.Links.Length で リンクの数がわかるので、
0から始まるループの終わりを Document.Links.Length - 1 で求めています。

次に中身ですが、単純なリンクを書くと、A タグのアンカーテキストとURLです。
HTMLのソースが、
[<a href="http://www.ken3.org/">Ken3 三流君Top</a>]
だったら、
.InnerTEXT で Ken3 三流君Top アンカーテキストを取り出せます。
.href で 、リンク先 http://www.ken3.org/ を取り出せます。

まぁ、ソースと実行結果を見てもらったほうがハヤイかなぁ。
下記、ソースと実行結果です。
'参照設定 Microsoft Internet Controls(Microsoft Browser Helpers)
'Microsoft HTML Object Library の 2つを忘れずに

'参照設定の方法は、 http://www.ken3.org/cgi-bin/group/vba_ie_object.asp をみてください。

Sub Link情報を取得する()
    'B3に格納されている、目的のURLを表示して、リンク情報を書き出す。

    Dim objIE     As InternetExplorer
    Dim strURL    As String
    Dim i         As Integer
    Dim nYLINE As Integer

    'データエリアを削除する。手抜きで10行から9999行固定です。
    Rows("10:9999").Delete Shift:=xlUp

    'IEのオブジェクトを作成する
    Set objIE = CreateObject("InternetExplorer.application")
    objIE.Visible = True
    
    'ページを開く(.Navigateで表示する。)
    strURL = Range("B3")        'URL代入
    objIE.Navigate "" & strURL  'アドレスを渡し表示する

    '読み込み完了となるまで、ループする。
    While objIE.ReadyState <> READYSTATE_COMPLETE Or objIE.Busy
        DoEvents
    Wend
    
    Debug.Print objIE.Document.Title
    Debug.Print objIE.Document.URL

    'リンクを探す
    'リンク数分まわす A列にアンカーテキスト B列にURLを書く
    nYLINE = 10  '10行目からせっとするので
    For i = 0 To objIE.Document.Links.Length - 1
        Cells(nYLINE, "A") = "'" & objIE.Document.Links(i).innerText 'テキスト
        Cells(nYLINE, "B") = objIE.Document.Links(i).href      'URL
        nYLINE = nYLINE + 1 'セット位置を+1する
    Next i
    
    'objIE.Quit   'IEを閉じる

End Sub

テストの動作結果:http://www.youtube.com/watch?v=XxjPsFHTRC0
※ソースコードと実行結果を合わせてみてくださいね。


次へ の URLを保管し、使用する。

単体が(1ページが)できたので、次は連続処理に挑戦してみます。
ポイントは、次へ の リンク先を保存しながら ループを回し、
・ページの表示
・表示待ち
・リンクの取り出し と 次への保存
を繰り返す、そんな感じです。

While strNEXT <> "" '次のURLが入っている間まわる
のループを作り、
objIE.Navigate strNEXT 'アドレスを渡し表示する
でページを表示してから、
While objIE.ReadyState <> READYSTATE_COMPLETE Or objIE.Busy
DoEvents
Wend
読み込み完了となるまで、ループでステータスの変化を待ちます。(READYSTATE_COMPLETE=4になるまで)
あとは、表示されたページに対しての処理です。
忘れずに、リンク取り出しのループの外で、
strNEXT = "" '次のURLを初期化
してから、Document.Links(i)のループを作ります。
For i = 0 To objIE.Document.Links.Length - 1
Cells(nYLINE, "A") = "'" & objIE.Document.Links(i).innerText 'テキスト
Cells(nYLINE, "B") = objIE.Document.Links(i).href 'URL
と、i番目のデータを書き込んだら、下記で 次への文字チェックと URLの保管を行います。
'次へか判断する
If Cells(nYLINE, "A") = "次へ" Then 'テキストが 次へ
strNEXT = Cells(nYLINE, "B") 'URL(次へ)を代入
End If
nYLINE = nYLINE + 1 'セット位置を+1する
Next i
↑これで、単体ページの処理が終わりました。
次へがあったら、 strNEXT に URLが保管されているので、
一番外側のループをまわり、次のページが表示され 繰り返す、そんな感じです。

ループの作り方、処理の方法は好みがあるので、いろいろと試したりしてください。
※連続処理/次へ処理(次ページ処理) コードを書くときの参考・叩き台となれば、幸いです。

'参照設定 Microsoft Internet Controls(Microsoft Browser Helpers)
'Microsoft HTML Object Library の 2つを忘れずに

'参照設定の方法は、 http://www.ken3.org/cgi-bin/group/vba_ie_object.asp をみてください。

Sub Link情報を取得する()
    'B3に格納されている、目的のURLを表示して、リンク情報を書き出す。
    '次へのボタンを押す。

    Dim objIE     As InternetExplorer
    Dim strURL    As String
    Dim strNEXT   As String  '次に表示するURL
    Dim i         As Integer
    Dim nYLINE As Integer

    'データエリアを削除する。手抜きで10行から9999行固定です。
    Rows("10:9999").Delete Shift:=xlUp

    'IEのオブジェクトを作成する
    Set objIE = CreateObject("InternetExplorer.application")
    objIE.Visible = True
    
    '初期ページを代入
    strNEXT = Range("B3")        'URL代入
    nYLINE = 10  '10行目からせっとするので
    
    While strNEXT <> ""   '次のURLが入っている間まわる
        'ページを開く(.Navigateで表示する。)
        objIE.Navigate strNEXT  'アドレスを渡し表示する
    
        '読み込み完了となるまで、ループする。
        While objIE.ReadyState <> READYSTATE_COMPLETE Or objIE.Busy
            DoEvents
        Wend
    
        'リンクを探す
        'リンク数分まわす A列にアンカーテキスト B列にURLを書く
        strNEXT = ""  '次のURLを初期化
        For i = 0 To objIE.Document.Links.Length - 1
            Cells(nYLINE, "A") = "'" & objIE.Document.Links(i).innerText 'テキスト
            Cells(nYLINE, "B") = objIE.Document.Links(i).href      'URL
            '次へか判断する
            If Cells(nYLINE, "A") = "次へ" Then  'テキストが 次へ
                strNEXT = Cells(nYLINE, "B")   'URL(次へ)を代入
            End If
            nYLINE = nYLINE + 1 'セット位置を+1する
        Next i
    Wend
    
    'objIE.Quit   'IEを閉じる

End Sub

テストの動作結果:http://www.youtube.com/watch?v=LL7KzeddrLk
※ソースコードと実行結果を合わせてみてくださいね。


終わりの挨拶

今回は、単純に次へのリンクを保存し、連続処理で使用しました。
次へを押す とか 言っておいて、押してなかったり(笑)

今回のサンプルファイル:[VBA_IE_LINK.zip]←サンプルのxlsが入ってます。。

最新情報と作成履歴は→[更新履歴と最新を表示]


ページフッター リンクや広告、質問送信など

三流解説を読んでいただき、どうもです。ここから下は、三流君宛のメッセージ送信や 三流君のホームページの紹介・案内です
目的の情報が見つかったか?少々心配しつつ、、、※質問や感想は、気軽に送ってくださいね。

質問や要望など メッセージを送る(三流君に連絡する)

三流プログラマーのKen3 が 皆さんの質問にお答えします
と カッコつけて言っても、実力不足ですべての質問に回答することはできないのが現実なのですが、できる範囲で 三流的な逃げ手 や 解決方法 を探します(回答します)。

感想や質問・要望・苦情など 三流君へメッセージを送る。
時間的余裕のある要望・質問・苦情の場合は、下記のフォームからメッセージを送ることができます。
あなたのお名前(ニックネーム):さん
返信は?: 不用(HP更新を待つ) , E-mail→ アドレス:に返事をもらいたい



(感想や質問・要望 メッセージはHPで記事に載せることがあります。)

急ぎで連絡がほしい、そんな時は:[三流君連絡先]に連絡してください。

IE関係、VBA関係 の 三流君のホームページの紹介・案内

[IE操作 三流解説のトップページへ 戻る] / [IE操作の三流サンプル一覧へ 戻る]

[三流君 VBAでWebBrowser IEを操作する] / [三流君 VBAで楽しくプログラミング] / [AB型の変わり者 三流プログラマー Ken3 三流君Top]

F1でヘルプを見たり、デバック時にDebug.Print使ったり、イミディエイト ウインドウで簡単な確認したり。
なれると当たり前に操作している方法が↓かなぁ。
[F1ヘルプ マクロ記録ほか]・・・基本のF1を押してヘルプを見る方法など
[実行時エラー、デバッグモード]・・・デバッグの流れを簡単に(ハマった時はツライけど)
[イミディエイト ウインドウ と Debug.Print]・・・プログラム作成時に便利なイミディエイト ウインドウ
[VBA ウォッチ式とSTOPを使ってみた]・・・STOPで止め、ウォッチ式でオブジェクトの中身を確認する方法など
[参照設定のお話]・・・設定すると便利な(設定しないと使えない)、参照設定のお話

項目別に↓にプログラマーの本音?それとも建て前?的な記事をまとめました。お探しのジャンルを選択してください。
[プログラムは心? spirit]・・・プログラマー 心・気質・魂
[学ぶ study]・・・学習、技術の取得
[仕様書 doc]・・・仕様書・設計書関係の話

項目別に↓に人気の記事をまとめてみました。お探しのジャンルを選択してください。
[VBAでIE ウェブブラウザーを操作]・・・VBAでIE,WebBrowserを操作する サンプルです
[MSアクセス から エクセル を呼ぶ Excel.Application]・・・AccessからExcelを操作したりデータの書き出しなどです
[アウトルック メールの操作 Outlook.Application]・・・VBAからOutlookを使い、メール関係を処理するサンプルです
↑上記3つみたいなCreateObjectで他のアプリケーションを操作するサンプルが人気です。

Excel関係:
[エクセル ユーザーフォームを操作する]・・・エクセルでユーザーフォームを作成して入力などを行ってます
[エクセルからアクセスを操作する]・・・ExcelからAccessのマクロを起動してみました、
[エクセル関係 関数、その他]・・・その他Excel関係です

Access関係:
[アクセス ユーザーフォーム/サブフォーム 操作]・・・アクセスでフォームを使ったサンプルです
[アクセス レポート操作]・・・レポートを操作してみました
[アクセス クエリーやその他関数]・・・あまりまとまってませんが、スポット的な単体関数の解説です

その他:VBAの共通関数やテキストファイルの操作など
[テキストファイルの操作(Open,Close,Print,Input)]・・・普通のテキストファイルを使ったサンプルです

Blog:[三流君の作業日記]/ [objIEを使用したサンプルコードを見る]/ 広告-[通販人気商品の足跡]



[トップページへ 戻る] / [サンプル一覧へ 戻る]