質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

Internet Explorer

Internet Explorer(IE;MSIE)はマイクロソフトが開発したウェブブラウザです。Microsoft Windowsに組み込まれています。

Q&A

解決済

1回答

9520閲覧

スクレイピングで特定商品の順位を確認するには

njkmamgir

総合スコア12

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

Internet Explorer

Internet Explorer(IE;MSIE)はマイクロソフトが開発したウェブブラウザです。Microsoft Windowsに組み込まれています。

0グッド

0クリップ

投稿2017/10/04 02:27

編集2017/10/04 02:31

EXCEL VBAを勉強中でWEBから情報収集をしようとしています。色々探しましたがイメージができず、コードもまだの状態で恐縮ですが、お力を貸していただけたらと思います。

###不明点
HTMLソースから特定商品の順位を拾ってくるためにどのようにプログラムを組むのか?(考え方?)

###考えたこと
・特定classタグ(<div class="product_img">など)を抽出し、何番目かを確認する
(何番目かを確認する関数?が見つけきれませんでした。)
・ソースを取得→商品名を探す→親要素へたどる→何番目かを確認する?という流れでしょうか? それとも他にいい方法がありますか?
勉強中の今の自分には難しいレベルとは思っていますが、ググるにしてもキーワードがわからずうまくヒットしない→時間がかかっている状況です。
この関数?を使うなどのアドバイスでかまいません。プロの方々がどのように考えるのか、この辺りで調べてみたらなど教えていただけますと幸いです。

###作成イメージ
サイトで、特定商品が人気順 or 新着順で上から何番目にいるのかを知りたい。商品は100以上あり、ループで処理する予定です。

特定ブランド × 特定カテゴリーの人気順で、特定商品が上から何番目にいるのかを確認する。

もし上記で見当たらなければ特定ブランド × 特定カテゴリーの新着順で、上から何番目にいるのかを確認する。


view-source:https://www.buyma.com/r/_YVES-SAINT-LAURENT-%E3%82%A4%E3%83%B4%E3%82%B5%E3%83%B3%E3%83%AD%E3%83%BC%E3%83%A9%E3%83%B3/-C2205/
この一覧から、特定商品の商品タイトルを検索し、上から何番目かを数値として返す。

出品されている商品1つのHTML構成は以下のとおりです。

`<div class="product_img"> <a href="/item/30900049/" class="js-track-search-action" data-action="view_item" data-item-id="30900049" data-page="1" data-rank="1"> <img alt="SAINT LAURENT シティ パッチ バックパック 467985GKQH6" src="https://static-buyma-com.akamaized.net/imgdata/item/170904/0030900049/121443730/210.jpg" /> </a> </div> <div class="product_body"> <div class="product_name"> <a href="/item/30900049/" class="js-track-search-action" data-action="view_item" data-item-id="30900049" data-page="1" data-rank="1">SAINT LAURENT シティ パッチ バックパック 467985GKQH6</a> </div> <div class="product_price"> <span class="price_reference">&yen;160,920</span> <span class="font_85"></span> <span class="Price_Txt">&yen;105,800</span> <span class="Price_Percent">34&#37;OFF</span> </div><!-- .product_price --> <div class="product_Brand"> <div class="result__oneitem-brandlink-bg"> <a href="/brand/YVES_SAINT_LAURENT_%E3%82%A4%E3%83%B4%E3%82%B5%E3%83%B3%E3%83%AD%E3%83%BC%E3%83%A9%E3%83%B3.html" class="brandname">Saint Laurent</a> <div item-id="30900049" brand-name-eigo="Saint+Laurent" class="result__oneitem-brandlinkwrap"> <i class="fab-icon fab-icon-arrow-down--s result__oneitem-brandlink"></i> </div> </div> <div class="brandexp" id="brandexp-item-30900049" data-brand-id='342'><span>i</span></div> </div> <div id="result__oneitem-popup-30900049" item-id="30900049" class="result__oneitem-popupwrap" style="display: none"> <div class="result__oneitem-popup"> <div class="result__popup-content"> <p class=""><i class="fab-icon fab-icon-search fab-design-mg--r5"></i><a href="/r/-C2205/" onClick="javascript:pageTracker._trackEvent(&#x27;PC検索結果&#x27;, &#x27;ブランドコンテキストメニュー/このブランドを条件から外す&#x27;, &#x27;Saint+Laurent&#x27;);">このブランドを条件から外す</a></p> </div> <div class="popup-arrow"></div> </div> </div> <div class="product_Buyer"> <a href="/buyer/644288.html">candylovecath</a> </div><!-- product_Buyer --> <div class="fab-design-of--h"> <span class="product-status--premium"> <a href="http://help.buyma.com/useful/1016/" class="product_PrebuyerLabel" target="_blank">PREMIUM</a> </span> <span class="product-status--itemreturn tips" title="送料込の価格表示です。">送料込</span> </div> </div><!-- .product_body --> </li><!-- .product --> <li item-id="29911265" class="product "> <div class="product_Action" item-url="/item/29911265/"> <div class="ActBt"> <a href="" item-id="29911265" class="MoreBtn js-track-search-action" data-action="look_item", data-item-id="29911265" data-page="1" data-rank="2"> <span class="n_search_iconset Icon_quickview"></span><br />LOOK </a> <a href="" item-id="29911265" class="WishBtn js-track-search-action" data-action="add_fav", data-item-id="29911265" data-page="1" data-rank="2"> <span class="n_search_iconset Icon_Wish"></span><br />WISH </a> </div> </div><!-- .product_Action -->`

###参考にしたサイト
https://www.vba-ie.net/
http://www.ken3.org/cgi-bin/group/vba_ie.asp
http://vbabeginner.net/vba%E3%81%A7%E9%85%8D%E5%88%97%E3%81%AB%E6%8C%87%E5%AE%9A%E6%96%87%E5%AD%97%E5%88%97%E3%81%8C%E5%AD%98%E5%9C%A8%E3%81%99%E3%82%8B%E4%BD%8D%E7%BD%AE%E3%82%92%E8%AA%BF%E3%81%B9%E3%82%8B/
http://officetanaka.net/excel/vba/variable/08.htm

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

・特定classタグ(<div class="product_img">など)を抽出し、何番目かを確認する
(何番目かを確認する関数?が見つけきれませんでした。)
・ソースを取得→商品名を探す→親要素へたどる→何番目かを確認する?という流れでしょうか? それとも他にいい方法がありますか?

考え方が逆ではないでしょうか。ソースを見ると、

html

1<ul class="clearfix"> 2<li>・・・</li> 3<li>・・・</li> 4 5</ul>

というようにクラス名clearfixのリストの要素として商品データが格納されているので、
このリストの要素(liエレメント)にForループでアクセスして、InnerTextで該当商品名が含まれるかチェックしていって、含まれていたら、その要素のインデックスで何番目かを取得するというようなプログラムにするといいかと思います。

投稿2017/10/04 08:46

hatena19

総合スコア33699

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

njkmamgir

2017/10/06 04:16

早速ご回答くださり、ありがとうございます! 考えが逆ですか、思ってもみませんでした。 >>このリストの要素(liエレメント)にForループでアクセスして、InnerTextで該当商品名が含まれるかチェックしていって、含まれていたら、その要素のインデックスで何番目かを取得するというようなプログラムにするといいかと思います。 具体的な回答までありがとうございます。このやり方で一度プログラムしてみたいと思います。またぜひお願いいたします m( _ _ )m
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問