以下のようなHTMLが直接記述されていないサイトのaタグ属性を取得するにはどうしたらよいでしょうか。
https://www.buzzvideo.com/user/6676852899450864646/publish
やりたいこととしては、一つ一つの動画のリンク(aタグ)の値を取得したいです。
IEで取得しようとしています。
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
回答1件
0
HTMLが直接記述されていないということがどういう意味なのかが分かりませんが、IEを使用されているのであれば、動画に移動する部分にマウスカーソルを合わせて、右クリックし、「要素の検査」を押していただくと、「f12開発者ツール」という以下の画像のような画面が開き、その画面でおっしゃっているHTMLの内容が確認できるかと思います。
今回の目的は「一つ一つの動画のリンク(aタグ)の値を取得」ですので、こちらの内のどの要素が必要なのかを吟味する必要があるかと思います。
今回の動画のリンクは、以下の画像の中で、赤枠で囲んだ部分になるかと思われます。
左上の「F12」と書かれた部分のすぐ下にあるマウスカーソルが書いてあるマークを押してから、IEの画面にカーソルを合わせて右クリックを押すと、その部分がHTMLのどの記述によって表現されているのかが分かりますのでもしよろしければ、お試しください。
この赤枠の中身を見ると、aタグの中のhref属性に、httpなどが書かれていない一見リンクに見えない文字列が入っていることが分かります。例えば、「/@可愛すぎる動物癒し系動画/これこそ最強のコンビ-【癒し】-BgKAEB73xF4」という文字列ですね。
これは、相対パスといって、リンクを表す方法の内、「http://〇〇〇〇.〇〇」といった「ドメイン」と呼ばれる部分が省略された、そのリンクの続きの部分になります。
このサイトの場合は、ドメインの部分が「https://www.buzzvideo.com」になっているようです。
例えば、このサイトの一番上に表示されている動画のあるリンクは、「https://www.buzzvideo.com/@可愛すぎる動物癒し系動画/これこそ最強のコンビ-【癒し】-BgKAEB73xF4」と表現されます。
これは、赤枠で囲んだ一番上の部分のaタグの中のhref属性の中身(/@可愛すぎる動物癒し系動画/これこそ最強のコンビ-【癒し】-BgKAEB73xF4)を、ドメイン部分(https://www.buzzvideo.com)に結合したものです。
つまり、赤枠で囲んだ部分のhref属性の中身と、ドメイン部分を結合したものが、今回取得したいものであるとわかります。
ここまで、状況を整理すれば、あとはvbaコードまで落とし込めば終わりです。
vbaでは、IE操作をするために、オブジェクト型の変数にIEを格納(?)して操作します。
今回は、当該サイトを開いているIEが既に立ち上がっており、他のIEのウィンドウが開いていない前提でコードを記述します。Windowsにあるシェルの機能を用いて今立ち上がっているウィンドウの配列を引っ張れるのが、objShell.Windowsの部分に当たります。その配列の中にある「Internet Explorer」と名前がついたウィンドウの内一番最初に見つかったものをobjIEに格納します。
以下のコードは、下記のリンクのサイトをほぼ丸パクリしたものです。
参考サイト1
```vba
Dim objIE As Object
Dim objShell As Object
Dim tmp As Object
Set objShell = CreateObject("Shell.Application")
For Each tmp In objShell.Windows
If tmp.Name = "Internet Explorer" Then
Set objIE = tmp
Exit For
End If
Next
これで、操作したいIEの画面をobjIEの中に格納したくらいに考えてください。 次にaタグの中のhref属性を上から順番に出していきます。 以下のコードは、[参考サイト2](https://www.vba-ie.net/element/linkurl.php)をほぼ丸パクリしたものです。 document.Linksで、HTMLの中のaタグがすべて入った配列になるっぽいです。ここは詳しくないので、ご自分でお調べいただければ幸いです。aタグのテキストをaタグも含めて出すのが、outerHTMLだそうです。この文字列の中に、このHTMLのタイトル(可愛すぎる動物癒し系動画)が入っているかを判定します。タイトルは、headと書かれている部分の白い三角を押せば以下のような画面が出てきますので、titleタグを見つければわかります。 ![イメージ説明](1a5d0f968584b91a10df546ff8d6f690.png) 次に、href属性の中身をA列に上から順番に出力しています。すいません、この辺りは、もっと詳しい人に聞いてください。 ```vba Dim objLink As Object Dim i As Long i = 1 For Each objLink In objIE.document.Links If InStr(objLink.outerHTML, "可愛すぎる動物癒し系動画") > 0 Then Range("A" & i) = objLink.href i = i + 1 End If Next
上記二つのコードを一つのSubプロシージャの中に記述して実行すれば、赤枠で囲んだ部分のhref属性の中身と、ドメイン部分を結合したものA列に上から順番に出力されます。
今回のようなご質問をなさる前に一旦、「vba IE操作」などでお調べいただければ、多くの参考資料が見つかります。まずは、グーグルで一度検索されて、一通りお調べになってからわからない部分を明確化し、一旦自分でコードを書かれた方が私よりも詳しい方々が的確なご回答をしていただけると思いますので、もしよろしければ、そのようにご対応いただければ幸いです。
投稿2021/07/17 16:09
総合スコア6
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。