URL取得後ハイパーリンクをつくる
スクレイピングでは特定のリンク先のURLを取得することもできます。
加えて取得したURLを使ってExcel上にハイパーリンクを用意することも可能です。
データにリンクが用意されていると使いやすいです。
リンク先の情報を効果的に使えば用意するデータ全体の文字数を減らす事もできます。
Webスクレイピングでは記事内に表示されていないリンク先のURLを取得する事もできます。
Webページ内にある要素なら大概のものはリンクとして抽出可能です。
今回はWeb内からリンク先記事のURLとタイトルを取得してExcelにハイパーリンクをセットします。
Excel内ではファイル内の図形とセルにハイパーリンクを用意してみます。
この本で勉強しました
表紙で面食らってしまうのですが非常に良く出来ている本でした。
Seleniumの本はよくあるのですがSeleniumbasicについて解説されている本は非常に少ないです。
Seleniumbasic(セレニウムベーシック)に関する記事は20ページほどしか無いですが十分勉強になります。
他にもPythonやJavascriptの事も載っています。
関連記事
今回のコードの中で使っている要素を全部紹介します。
seleniumは初期設定が必要です
初期設定ができていないと何も始まりません。
VBA×SeleniumbasicでWebスクレイピングを御検討の方は以下記事をご確認ください。
ハイパーリンク
Microsoftの「HYPERLINK 関数」の説明から抜粋しました。
現在のブックの別の場所にジャンプするか、ネットワーク サーバー、イントラネット、またはインターネットに保存されているドキュメントを開くショートカットを作成
Microsoft Excel の HYPERLINK 関数より抜粋
「参照したい情報へのパスがテキストに埋め込まれた状態」というのがハイパーリンクです。
Web内でもExcel内でも御馴染みの機能ですので説明はこの辺にしておきます。
コード
最初にコードを紹介します。ボタンクリックでコードをコピーできます。
VBEに貼り付けてから以降の解説をご覧ください。
Sub ハイパーリンク()
Dim Driver As New ChromeDriver 'Chromeドライバー
Dim txt As String '記事のタイトル
Dim URL As String 'リンク先のURL
With Driver
.Get "https://www.slt-pgming-21.net/category/contents/excelvba/websc/"
.Window.Maximize
'取得したいURLとリンク先のタイトルを各変数に格納
URL = .FindElementByXPath _
("/html/body/div/div[4]/div/main/div[3]/a[7]/article/div/h2").Attribute("href")
txt = .FindElementByXPath _
("/html/body/div/div[4]/div/main/div[3]/a[7]/article/div/h2").Text
'先に図形に変数txtを記入&配置を中央にする(***は任意の図形名)
With ActiveSheet.Shapes("***").TextFrame
.Characters.Text = txt
.HorizontalAlignment = xlHAlignCenter
.VerticalAlignment = xlVAlignCenter
End With
'図形にハイパーリンク(***は任意の図形名)
ActiveSheet.Hyperlinks.Add Anchor:=ActiveSheet.Shapes("***"), Address:=URL
'セルにハイパーリンク(3つ書きました どの書き方でもハイパーリンクをセットできます)
ActiveSheet.Hyperlinks.Add Anchor:= _
Cells(1, 1), Address:=URL, TextToDisplay:=txt, ScreenTip:="ハイパーリンクですよ"
Worksheets("Sheet1").Hyperlinks.Add Anchor:= _
Cells(2, 1), Address:=URL, TextToDisplay:=txt
Cells.Hyperlinks.Add Anchor:= _
Cells(3, 1), Address:=URL, TextToDisplay:=txt
'後片付け
.Close
Set Driver = Nothing
End With
End Sub
コードには図形への指示もあります。
ワークシート上に図形を用意してない時は19~26行目をコメントアウトしてください。
アウトプット
各セルの文字例と図形自体にハイパーリンクがセットされています。
解説
まずはコードの構成を提示します。
- 1URL、テキストの取得
- 2図形の状態を整える
- 3図形とセルにハイパーリンクをセット
以降構成についての解説をしていきます。
1_URL、テキストの取得
サンプルとして私のブログ内の「Webスクレイピング」というカテゴリーにアクセスしています。
そこで一番上に表示されている記事名とリンク先を使ってExcelにハイパーリンクを用意してみます。
取得するのは以下2つの要素です。
- リンク先のURL
- リンク先の記事名
どちらもFindElementByXPathメソッドを使用するのですがURLはさらにひと手間加えます。
FindElementByXPathメソッドの戻り値はWebElementオブジェクトです。
WebElementオブジェクトには対象の要素が格納されています。
このオブジェクトに対してAttributeメソッドを使用します。
Attributeメソッドの引数にhrefを指定する事でリンク先のURLを取得する事ができます。
(今回は取得したURLを変数URLに格納しています)
hrefはHTMLの属性です。HTMLについては別記事で少しだけ説明しています。こちらをご覧ください。
2_図形の状態を整える
図形のみハイパーリンクをセットする際に変数txtの情報が記入できなかったので事前に用意します。
図形を指定し変数txtの情報を記入後文字位置をセンターにしています。
3_図形とセルにハイパーリンクをセット
最後にハイパーリンクをセットします。
HyperlinksコレクションのAddメソッドを使用します。
引数は5種類あります。今回は4つ使用してみました。
番号 | 引数 | 説明 |
---|---|---|
1 | Anchor | リンクをセットする場所を指示 |
2 | Address | リンク先のURLを指示 |
3 | SubAddress | Webスクレイピングでは使用しません |
4 | ScreenTip | ハイパーリンクにカーソルを合わせた時に表示される文字を指示 |
5 | TextToDisplay | ハイパーリンクをセットする文字列を指示 |
30行目のコードだけScreenTipを使っています。
セルA1のハイパーリンクにカーソルを持っていくとScreenTipで設定した文字が表示されます。
セルへのハイパーリンクについては3つほどコードを用意しました。
どの方法でもハイパーリンクを用意する事ができます。
(最後のCellsプロパティを使ったコードはCellsプロパティの事が理解出来ていると書けるコードです)
図形の命名方法
事前に設定(入力)しておきましょう。これで名前で図形を指定する事ができます。
図形を選択するとセルA1の上あたりに図形名が表示されます。ここを書き換えてください。
最後にEnterを押下する事で図形の名前が書き変わります。
まとめ
これでハイパーリンクを使う事ができるようになります。
ExcelからWebへのアクセスも可能となりますね。データの「使いやすさ」や「操作性」が向上します。
使いやすくなったデータは他者が使っても使いやすいデータになります。
スクレイピングした情報を他者に展開する際にリンクを付けてリスト化してあげると親切です。
リンクの数は少なくても良いので適切な位置に数個のリンクを用意するだけでデータのレベルがあります。
コードも簡単ですので是非使ってみてください。
他にもWebスクレイピングではいろいろな事ができます。
一緒に使うとスクレイピングの質が上がる機能を載せておきます。