- ベストアンサー
エクセルでメタタグを抽出する方法
- エクセルシートのB列にURLが並んでいるとして、VBAAを使って、C列にはdescription、D列にはkeywordsを抽出する方法について知りたいです。
- 以前、質問した内容はB列にURLが並んでいて、A列にタイトルを抽出する方法でした。
- VBAAの知識がなく、URLの一覧があるB列にタイトル、C列にdescription、D列にkeywordsを抽出する方法について教えてください。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
torasan117さん こんにちは。 HTMLの記述は自由(スペースや改行等々)なのと、文字コード(S-Jis,UTF8等々)の違いもあり 各サイトを確認しないと、きちんとしたデータを収集できないかも知れません。 一応サンプルを作成してみましたが、うまくいかない時は自分で修正して欲しいのですが 「VBAの知識がない」とのことで厳しいかも知れません。 今回はdescription、keywordsの取得がタイトル取得より面倒なので「正規表現」を使用しました。 正規表現のパターン(抽出条件?)を理解すれば修正も可能かと思います。 Public Sub ReadTitle() Dim url As Range Dim Http, buf As String Dim re, mc Set Http = CreateObject("MSXML2.XMLHTTP") Set re = CreateObject("VBScript.RegExp") Set url = Range("B1") Do While (url.Value <> "") Http.Open "GET", url.Value, False Http.Send buf = StrConv(Http.ResponseBody, vbUnicode) buf = Replace(buf, vbCr, " ") buf = Replace(buf, vbLf, " ") With re .IgnoreCase = True .Global = True .Pattern = "<title>(.*?)</title>" Set mc = .Execute(buf) If mc.Count <> 0 Then url.Offset(0, -1) = mc(0).SubMatches(0) .Pattern = "meta\s+?name.*?description.*?content=.*?['""](.*?)['""]" Set mc = .Execute(buf) If mc.Count <> 0 Then url.Offset(0, 1) = mc(0).SubMatches(0) .Pattern = "meta\s+?name.*?keywords.*?content=.*?['""](.*?)['""]" Set mc = .Execute(buf) If mc.Count <> 0 Then url.Offset(0, 2) = mc(0).SubMatches(0) End With Set url = url.Offset(1, 0) Loop Set Http = Nothing Set re = Nothing End Sub
その他の回答 (1)
- bin-chan
- ベストアンサー率33% (1403/4213)
列Cのdescription、列Dのkeywordが列Bにどのような記述をされているのか? 前質問の#1さんの回答のとおりですが、コードを列挙するよりも列Bを例示しないと難しいですよ。
お礼
回答ありがとうございます。 思っていたことが出来ました。 本当に感謝します。