[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『VBAスクレイピングで「alt」を取得したい』(ユナ)
VBA初心者です。どうにもうまくできず助けてください。
以下のコードでタイトルを取得することはできました。
が、altタグの「医薬品指定2類」や「消費税10% 黒」をうまく取得できませんでした。
エクセル上にC列以降に表示させたいのですが、どんなコードをかけばよろしいでしょうか?
Sub 出力()
Dim sh1, sh2 As Worksheet Set sh1 = Worksheets("検索ワード") Set sh2 = Worksheets("出力")
Application.ScreenUpdating = False ' 描画を停止する
'IEオブジェクトを準備 Dim objIE As InternetExplorer '新しいIEオブジェクトを作成してセット Set objIE = CreateObject("Internetexplorer.Application")
'IEを表示 objIE.Visible = False
'IEでURLを開く objIE.navigate "https://netshop.create-sd.co.jp/shop/goods/search.aspx?keyword=%83A%83%5E%83b%83N&tree=&goods=&name=&yy_min_releasedt=&mm_min_releasedt=&dd_min_releasedt=&yy_max_releasedt=&mm_max_releasedt=&dd_max_releasedt=&last_sdt=&genre_tree=&sort=&search.x=0&search.y=0"
'読み込み待ち Call WaitResponse(objIE)
'Excelの行カウント変数 rowCnt = 2
'次ページのaタグがあるかどうかの判定結果
Dim hasAtag As Boolean Dim htmlAnc As HTMLAnchorElement Do While True Dim htmlDoc As HTMLDocument: Set htmlDoc = objIE.document 'ここで全ての記事タイトルを取得する処理
'格納
Set posts = objIE.document.getElementsByClassName("StyleD_Item_")
For Each Post In posts
'タイトルを取得してExcelへ出力 sh2.Cells(rowCnt, 2) = Post.getElementsByClassName("goods_name_").Item(0).innerText
'Excelへ出力行を次の行へ rowCnt = rowCnt + 1 Next
hasAtag = False
'次ページのaタグがあるか? For Each htmlAnc In htmlDoc.getElementsByTagName("a") If htmlAnc.innerText = "次>" Then 'aタグをクリック htmlAnc.Click 'aタグがあったのでtrueに hasAtag = True Exit For End If Next htmlAnc
'aタグがない場合、処理終了 If hasAtag = False Then Exit Do End If
'読み込み待ち Call WaitResponse(objIE)
Loop 'オブジェクトを閉じる objIE.Quit
'メモリからオブジェクトを破棄
Set objIE = Nothing
Application.ScreenUpdating = True ' 描画を再開する
Unload UserForm1 MsgBox "抽出終了しました"
End Sub
< 使用 Excel:Excel2019、使用 OS:Windows10 >
疑問1. >以下のコードでタイトルを取得することはできました。
とありますが…最初からエラーで動きませんが
↓まずここで 変数が定義されていません 'Excelの行カウント変数 rowCnt = 2
せめてさ〜ここまで出来ましたって言うのなら…動くマクロを提示して欲しいな。
疑問2. ↓ここも 理解に苦しみますね。 objIE.navigate "https://netshop.create-sd.co.jp/shop/goods/search.aspx?keyword=~略
普通に、https:// 〜 search.y=0 までを...Chromeで検索すると キーワード:アタック ですが…なんでしょう。
参考1 スレで過去に同じサイトでスクレイピングされてた人の URLです。参考にされてみてはどうでしょうか? https://www.excel.studio-kazu.jp/kw/20210706024708.html
参考2 ここまでしましたが…例です。
キーワードを医薬品で検索させて、サイトのページにたどり着けました。 結果…マクロ動作後、ソースコードを見ると…無事に反映されましたが…
2106 <tr id="search_keyword"> 2107 <th>キーワード:</th> 2108 <td><input value="医薬品" size="25" type="text" name="keyword" maxlength="30"></td> 2109 </tr>
ここから先〜追加で以下のマクロを入れまいたが、したいことができません。 もしくは、ここでエラーがでてしまっています。 みたいなかんじにされたら回答者で、詳しい人がフォローしてくれるかもですよ。
Option Explicit '参照設定 MIcrosoft HTML Object Library / Microsoft Internet Controls #If VBA7 Then Private Declare PtrSafe Sub Sleep Lib "kernel32" (ByVal Ms As LongPtr) #Else Private Declare Sub Sleep Lib "kernel32" (ByVal Ms As Long) #End If
Sub Sample()
Dim objTag As Object, objsubmit As Object Dim objIE As New InternetExplorer Set objIE = New InternetExplorer
With objIE .Visible = True .FullScreen = False .Top = 0 .Width = 1150 .Height = 750 End With
objIE.navigate "https://netshop.create-sd.co.jp/shop/" Call IEWait(objIE) '' 待機処理 Sleep 1000
Dim keyword As String keyword = "医薬品" '' キーワード検索
For Each objTag In objIE.document.getElementsByTagName("input") If InStr(objTag.outerHTML, "type=""text") > 0 Then objTag.Value = keyword Exit For End If Next
For Each objsubmit In objIE.document.getElementsByTagName("input") If InStr(objsubmit.outerHTML, """検索""") > 0 Then objsubmit.Click Sleep 1000 Exit For End If Next
' objIE.Quit 'IEを閉じる ' Set objIE = Nothing
End Sub Function IEWait(ByRef objIE As Object) Do While objIE.Busy = True Or objIE.readyState <> READYSTATE_COMPLETE DoEvents Loop End Function
と言っといて…私のもちゃんと動くかどうかですが… 尚、私は、詳しくないので…聴かないように (笑)
(あみな) 2022/01/26(水) 18:02
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.