[[20220125211943]] 『VBAスクレイピングで「alt」を取得したい』(ユナ) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『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.