

私はネットショッピングが大好きで、普段からAmazon、楽天、Yahooショッピングなどで買い物しております。
ネットショッピングで買い物するようになって気づいたのですが、サイトが違うと、同じ商品にも関わらず値段が全然違うのですね。(もちろんですが...)
同じ商品の価格を比較してくれる「価格.com」のようなサイトもあるのですが、私が普段買い物するような商品は価格.comに載ってないような商品やサイトもあるため、自分でネットサーフィンしながら、安いサイトで買っています。
その際に、商品が同じであるかどうかは写真だけでは判りません。そこで使っているのが、「JANコード」です。
これは商品ごとに割り当てられた13ケタの数字なので、商品名や写真で同じ商品か分かりにくい場合にも判別することができました。
最近スクレイピングというテクニックの存在を知りました。
もちろん相手のサイトに迷惑がかからないように気を付けないことは承知しております。
岡崎図書館事件の様なことにならないために、スクレイピングするのは一回限りです。
私がやりたいことですが、Lohacoのサイトで商品の一覧から、
(1)商品名(2)値段(3)JANコード(4)URL
以上の4つを抜き出して、エクセルにまとめることは可能でしょうか?
また可能の場合は、どのようなプログラミングで出来ますでしょうか。
LOHACOホーム>コスメ・スキンケア・美容>スキンケア・基礎化粧品>化粧水>エイジング化粧水
http://lohaco.jp/g4/55-5501-5501004-55010040002/ …
例えば以上のページです。このページにはスキンケア用品が74商品登録してあります。(現時点)
最終的にはExcelのA列に商品名、B列に値段、C列にJANコード、D列にURLを抜き出したいです。
私はこれまでプログラミングを勉強したことがなかったため、かなりハードルが高かったです。
いちを「データを集める技術(佐々木拓郎 著)」と「ExcelVBAでIEを思いのままに操作できるプログラミング術」という本を購入して勉強してみました。
しかしプログラミングの知識が全くないまま進んで行ったために、一か月くらい勉強しましたが、途中で挫折してしまいました。
また、VBAの基本から勉強しないと思い「Excel VBA 本格入門」という本を勉強しましたが、こちらは一通り理解することができました。
既存のスクレイピングツールを色々試したのですが、「Octoparse」というツールがなかなか使いやすかったです。
しかしホームページごとに構成が違ったためか、なかなか思い通りにツールが動かず、上のサイトのJANコードを抜き出すことができませんでした。
回答を頂ければ幸いです。よろしくお願いいたします。
補足もしプログラミングにお詳しい方がいらっしゃいましたら、一つの例として参考にさせて頂きたいので、上記の質問が解決できるプログラミングをご教授頂けると嬉しく思います。
※言語は問いませんので、幅広い回答をお待ちしております。
No.1ベストアンサー
- 回答日時:
kenta312さん
こんにちは。
以下サンプルプログラムですが、「参照設定」とか「プログラムの見やすさ」等々は手を抜いています。
自分なりにプログラムを整理して下さい。
Option Explicit
Public Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
Sub testIE()
Dim I As Long
Dim J As Long
Dim objIE As Object
Dim URL件数 As Long
Dim URL配列(100) As String
Set objIE = CreateObject("Internetexplorer.Application")
objIE.Visible = True
objIE.navigate "http://lohaco.jp/g4/55-5501-5501004-55010040002/ …
Do While objIE.Busy = True Or objIE.readyState <> 4 '読み込み待ち
DoEvents
Loop
Call Sleep(1000)
URL件数 = objIE.Document.getElementsByClassName("itemBox").Length
For I = 0 To URL件数 - 1
URL配列(I + 1) = objIE.Document.getElementsByClassName("itemBox")(I).getElementsByTagName("A")(0)
Next I
For I = 1 To URL件数
objIE.navigate URL配列(I)
Do While objIE.Busy = True Or objIE.readyState <> 4 '読み込み待ち
DoEvents
Loop
Call Sleep(1000)
Cells(I, "A").Select
Cells(I, "A") = objIE.Document.getElementsByClassName("cp-product_itemName")(0).innertext
Cells(I, "B") = objIE.Document.getElementsByClassName("sellPrice")(0).innertext
Cells(I, "D") = URL配列(I)
For J = 0 To objIE.Document.getElementsByTagName("TR").Length - 1
If objIE.Document.getElementsByTagName("TR")(J).innertext Like "*JANコード*" Then
Cells(I, "C") = "'" & Trim(objIE.Document.getElementsByTagName("TR")(J).getElementsByTagName("TD")(0).innertext)
Exit For
End If
Next J
Next I
objIE.Quit
Set objIE = Nothing
End Sub
jcctaira様
ご返信ありがとうございます。
サンプルとして作って頂いたマクロを試させて頂きました。
私がやりたかったことがドンピシャで出来たので本当に驚いてしまいました。
というか、Excel VBAで実現できたことに驚いております。
スクレイピングの本は、PythonやRubyでしか出ていなかったので諦めかけていました。
やはり、IE操作のgetElement系の命令で処理できるんですね。
まだまだ分からなかった部分が多いのですが、勉強していきたいと思います。
本当にありがとうございます。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Excel VBA セルの値がおかしいです
-
VBA セル間のリンク修正につい...
-
【マクロ】シートの変数へ入れ...
-
【マクロ】開いているブックの...
-
VBAでエクセルのテキストデータ...
-
vba textboxへの入力について教...
-
複数のExcelファイルをマージす...
-
Vba Array関数について教えてく...
-
【マクロ】並び替えの範囲が、...
-
【マクロ】売上一覧YYYYMMDDHHS...
-
算術演算子「¥」の意味について
-
Excel VBA 選択範囲の罫線色の...
-
Vba セルの4辺について罫線が有...
-
エクセルのマクロについて教え...
-
エクセルの改行について
-
vb.net(vs2022)のtextboxのデザ...
-
改行文字「vbCrLf」とは
-
Excelマクロで使うVBAコードを...
-
VBAの「To」という語句について
-
Excelのマクロについて教えてく...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
ヤフー知恵袋みたいなサイトを...
-
C/C++でHTMLソースの取得はでき...
-
Qtを勉強するのに何か良い書籍...
-
[ADO]と[ADO.NET]の違い
-
IPアドレス、サブネットマスク...
-
C言語本 Windows10対応 お...
-
大阪梅田でプログラミング関係...
-
C言語の学習について
-
ドライバ開発の勉強方法を教え...
-
さっぱりわからない
-
HTML CSSの勉強のポートフォリ...
-
コマンドプロンプトのコマンド...
-
ラジオボタンについて
-
MSP430のプログラム学習
-
C++でのロボットのプログラミン...
-
C++導入または入門書として
-
c++のお勧めの入門書
-
WEBブラウザを作りたい。
-
秀和システムのPythonプログラ...
-
eclipseで関数printfを解決でき...
おすすめ情報