ホームページに書いてあるデータを自動で収集するスクレイピングをしたいです。 例えば、 以下のうまい棒のサイトにある「商品名」「商品説明」と
ホームページに書いてあるデータを自動で収集するスクレイピングをしたいです。 例えば、 以下のうまい棒のサイトにある「商品名」「商品説明」と http://www.yaokin.com/products_search/umaibo その商品をクリックした次のページにある「原材料」の3つを http://www.yaokin.com/products_search/umaibo/item_M27001 全種類のうまい棒に対し、スクレイピングで抽出したいのです。 最終的には 「商品名」「商品説明」「原材料」の並びで うまい棒の1種類につき1行で、Excel形式で出力したいです。 ExcelのVBAやOctoparseで実現できるみたいですが、 その場合は、具体的にどのように操作すれば良いのかをご教示いただければ、大変ありがたいです。 以上、どうぞよろしくお願い致します。
Visual Basic | Internet Explorer・81閲覧
ベストアンサー
https://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q14255910774 ⇑ こっちの質問と基本的には同じ script処理のないページだからMSXML2.XMLHTTPのみで処理が可能 スクレイピングは基本的にやっていることは同じ 違いは、 ・読み込みに何を使うか ・取得するデータの要素特定方法 だけ サンプルVBA Sub Sampl() Dim HtmlDoc As Object Set HtmlDoc = CreateObject("htmlfile") With CreateObject("MSXML2.XMLHTTP") .Open "GET", "http://www.yaokin.com/products_search/umaibo?" .Send Do While .readyState < 4 DoEvents Loop HtmlDoc.Write .responseText End With Do While HtmlDoc.getElementsByClassName("ible-list").Length < 1 DoEvents Loop Dim Gelm As HTMLDivElement Dim HtmlDoc2 As Object Dim Dtabl As Variant Dim Dcunt As Long ReDim Dtabl(HtmlDoc.getElementsByClassName("ible-cell").Length, 2) Dtabl(0, 0) = "商品名" Dtabl(0, 1) = "商品説明" Dtabl(0, 2) = "原材料" For Each Gelm In HtmlDoc.getElementsByClassName("ible-cell") Dcunt = Dcunt + 1 Set HtmlDoc2 = CreateObject("htmlfile") With CreateObject("MSXML2.XMLHTTP") .Open "GET", Replace(Gelm.getElementsByTagName("a")(0).href, "about:", "http://www.yaokin.com") .Send Do While .readyState < 4 DoEvents Loop HtmlDoc2.Write .responseText End With Do While HtmlDoc2.getElementsByClassName("ible-area").Length < 1 DoEvents Loop Dtabl(Dcunt, 0) = HtmlDoc2.getElementById("html16core").innerText Dtabl(Dcunt, 1) = HtmlDoc2.getElementById("html17core").innerText Dtabl(Dcunt, 2) = HtmlDoc2.getElementById("html33core").getElementsByTagName("td")(1).innerText Next Range("A1").Resize(Dcunt, 3).Value = Dtabl End Sub
最後の Range(\u0022A1\u0022).Resize(Dcunt, 3).Value = Dtabl ⇓ Range(\u0022A1\u0022).Resize(Dcunt + 1, 3).Value = Dtabl に訂正
質問者からのお礼コメント
サポーターさま 別の質問の方で、大変お世話になりました。 あちらのコードで、こっちもやってみたいと思います! いろいろとご指導いただき、誠にありがとうございました!
お礼日時:1/27 23:36