質問: スクレイピングについて【初心者】 私はネットショッピングが大好きで、普段からamazon、楽天、yahooショッピングなどで買い物しております。 ネットショッピングで買い物するようになって気づいたのですが、サイトが違うと、同じ商品にも関わらず値段が全然違うのですね。(もちろんですが...) 同じ商品の価格を比較してくれる「価格.com」のようなサイトもあるのですが、私が普段買い物するような商品は価格.comに載ってないような商品やサイトもあるため、自分でネットサーフィンしながら、安いサイトで買っています。 その際に、商品が同じであるかどうかは写真だけでは判りません。そこで使っているのが、「janコード」です。 これは商品ごとに割り当てられた13ケタの数字なので、商品名や写真で同じ商品か分かりにくい場合にも判別することができました。 最近スクレイピングというテクニックの存在を知りました。 もちろん相手のサイトに迷惑がかからないように気を付けないことは承知しております。 岡崎図書館事件の様なことにならないために、スクレイピングするのは一回限りです。 私がやりたいことですが、lohacoのサイトで商品の一覧から、 (1)商品名(2)値段(3)janコード(4)url 以上の4つを抜き出して、エクセルにまとめることは可能でしょうか? また可能の場合は、どのようなプログラミングで出来ますでしょうか。 lohacoホーム>コスメ・スキンケア・美容>スキンケア・基礎化粧品>化粧水>エイジング化粧水 http://lohaco.jp/g4/55-5501-5501004-55010040002/?resultcount=100&va 例えば以上のページです。このページにはスキンケア用品が74商品登録してあります。(現時点) 最終的にはexcelのa列に商品名、b列に値段、c列にjanコード、d列にurlを抜き出したいです。 私はこれまでプログラミングを勉強したことがなかったため、かなりハードルが高かったです。 いちを「データを集める技術(佐々木拓郎 著)」と「excelvbaでieを思いのままに操作できるプログラミング術」という本を購入して勉強してみました。 しかしプログラミングの知識が全くないまま進んで行ったために、一か月くらい勉強しましたが、途中で挫折してしまいました。 また、vbaの基本から勉強しないと思い「excel vba 本格入門」という本を勉強しましたが、こちらは一通り理解することができました。 既存のスクレイピングツールを色々試したのですが、「octoparse」というツールがなかなか使いやすかったです。 しかしホームページごとに構成が違ったためか、なかなか思い通りにツールが動かず、上のサイトのjanコードを抜き出すことができませんでした。 回答を頂ければ幸いです。よろしくお願いいたします。 補足もしプログラミングにお詳しい方がいらっしゃいましたら、一つの例として参考にさせて頂きたいので、上記の質問が解決できるプログラミングをご教授頂けると嬉しく思います。 ※言語は問いませんので、幅広い回答をお待ちしております。
回答: 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/?resultcount=100&va" 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