
ご回答者様
いつもお世話になっております。
表題の件、マイホーム購入のために不動産情報を見たり不動産屋から資料を取り寄せています。
不動産屋の資料はPDFがほとんどで比較がしにくいのでスーモのスクレイピングを考えております。
下記項目を抽出予定です。
URL
https://suumo.jp/jj/bukken/ichiran/JJ010FJ001/?a …
抽出項目
物件名
販売価格
所在地
沿線・駅
専有面積
間取り
バルコニー
築年数
取扱業者
担当
電話番号
ソースは我流ですが途中まで作成しました。
Dim ObjIE As InternetExplorer
Set ObjIE = CreateObject("InternetExplorer.Application")
ObjIE.Visible = True
Dim ws As Worksheet
Dim ws2 As Worksheet
Set ws = ThisWorkbook.Worksheets("実行")
Set ws2 = ThisWorkbook.Worksheets("Output")
LastRow = ws.Cells(Rows.Count, 2).End(xlUp).Row
If LastRow = 2 Then
MsgBox "URLが記載されていません"
Exit Sub
End If
ws2.Cells.Clear
ws.Range("E3:E24").Copy
ws2.Range("A1").PasteSpecial Paste:=xlPasteAll, Operation:=xlNone, SkipBlanks:= _
False, Transpose:=True
i2 = 1
imax = ws.Cells(i, 3) '
If imax = "" Then imax = 9999999
imaxc = 1
Do Until i = LastRow + 1
ObjIE.Navigate ws.Cells(i, 2)
Call waitrespons1(ObjIE)
Loop
For Each Obj In ObjIE.Document.getElementsByClassName("dottable-vm") '物件名
Cells(i, 2) = Obj.innerText
Exit For
Next
i = i + 1
Msbox = 完了しました
End Sub
Sub waitrespons1(ObjIE As Object)
Do While ObjIE.Busy = Ture Or ObjIE.ReadyState < READYSTATE_COMPLETE
DoEvents
Loop
End Sub
下記内容が分かりません。
1.物件名の後のClasswo指定したが物件名が抽されない。
2.次のページがある場合(今回であれば3件目以降の次のページ)に飛ぶにはどうしたら良いか。
当方、初心者ですので根本的なソースの誤りがあれば修正頂きたいです。
販売価格
所在地
沿線・駅
専有面積
間取り
バルコニー
築年数
取扱業者
担当
電話番号
上記内容につきましては現在質問を差し上げている内容が解決されてから対応します。
お忙しい所恐れ入りますが宜しくお願い致します。
No.2ベストアンサー
- 回答日時:
部分サンプルをどうぞ
For Each Obj In ObjIE.Document.getElementsByClassName("dottable-vm") '物件名
Cells(i, 2) = Obj.innerText
Exit For
Next
i = i + 1
を下記に変える
Dim Str As Object, i As Long, j As Long
i = 0
j = 1
For Each Str In objIE.document.getElementsByClassName("dottable-line")
If Str.innerText Like "物件名*" Or i >= 1 And i <= 5 Then ’この辺りは、HTMLソースをご覧ください。または、この条件文をなくし出力項目を確認してください。
Sheets(2).Cells(j, 1) = Str.innerText ’インデックス2のA1セルから出力(検証する場合、変えてください)
i = i + 1
End If
If i = 5 Then i = 0
j = j + 1
Next Str
あくまで、ターゲットのページ(ソースコード)の場合です。
TagName("dt")でobjElement.NextSiblingは、未検証、ぱっと見ダメそう。
また、不足分などは、ページのソースコードを見る限り、
ClassName("storecomment-txt")
ClassName("shopmore-title")
ClassName("makermore-tel")
などで抽出できるかと、、思います。
まずは、スクレイピングのみプロシージャを完成させた方が良いかと
その後、Cells.EntireRow.AutoFitなど考えてみてはいかがでしょう。
また、モジュールの最初に Option Explicit を加えましょう。
VBE > ツール > 編集 初心者ならすべてをチェック(個人的意見)
全てをチェックしたVBEを使用すれば、コード自体のタイプミスなどは、減ると思いますよ。

No.1
- 回答日時:
質問にあるコードですが、色々と難がありますね。
変数宣言、タイプミスを含め、検証して示された方が良いかと思います。
抜粋コードにしても読む側から見て ?が付きます。ざっくりでタイプミスであろう箇所が3か所ありますよ。
i2 = 1 imax = ws.Cells(i, 3)
If imax = "" Then imax = 9999999
Do While ObjIE.Busy = Ture
また、i = i + 1を必要とするループはどれ?
>2.次のページがある場合(今回であれば3件目以降の次のページ)に飛ぶにはどうしたら良いか。
これは、項目を指しているのか、それとも表示ページ(該当ページの遷移<div class="pagination pagination_set-nav">もしくは<p class="pagination-parts"><a href="を指しているのか
項目として同じ項目を飛ばしたいと言う事であれば、簡単な方法として、すべてをシートに書き込んだ後、重複削除を行った方が良いと思います。(個人的に検証段階で確認し易い)
いずれにしても、ws.Range("E3:E24").Copyなどのスクレ―ピングに不要と思われる個所を追加する前に
シンプルに対象ページをスクレ―ピングして対象のキーワードを抽出するコードを一旦書いてはどうでしょう。
スクレ―ピングの方法もいくつかありますし、HTMLの知識も必要になり道のりは、まだ遠い気もしますが、学習してください。
∴物件名などを抽出するサンプルは、控えます。
参考サイト https://www.vba-ie.net/
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
「 騒音に注意して下さい 」...
-
大至急助けてください。賃貸物...
-
騒音で壁ドンする人って頭おか...
-
隣人が壁を叩き返して来ました!
-
修理代金はいらないと言われた...
-
無断駐車で通報されました。
-
引っ越してきたばかりだが、管...
-
駐車場に犬の糞、対策教えてく...
-
2階の方の洗濯機、乾燥機の使用...
-
隣の家のいびきがうるさくて気...
-
給湯基本料と給湯使用料について
-
下の階の犬が夜中1時から2時過...
-
口座名義の「家賃口」の読み方
-
不燃のアクリル板ってありますか?
-
セールス?同じ人が何度も
-
騒音にクレーム紙(管理会社)が...
-
朝5時の洗濯は非常識?
-
下の階の人がドンドンしてくる
-
分譲マンションの管理組合で明...
-
木造アパートの下の階の音が気...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
「 騒音に注意して下さい 」...
-
騒音で壁ドンする人って頭おか...
-
無断駐車で通報されました。
-
2階の方の洗濯機、乾燥機の使用...
-
ペット可のアパートに引っ越し...
-
隣の家のいびきがうるさくて気...
-
木造アパートの下の階の音が気...
-
セールス?同じ人が何度も
-
大至急助けてください。賃貸物...
-
近所にやばい人がいます。どう...
-
隣人が深夜までテレビをつけて...
-
深夜に上階からの排水音で困っ...
-
分譲マンションの管理組合で明...
-
隣人のおしっこの音が聞こえる!
-
アパート(賃貸)の揺れがひど...
-
下の階の犬が夜中1時から2時過...
-
不動産屋様から立ち退き請求を...
-
給湯基本料と給湯使用料について
-
大東建託の2階に住まれている方...
-
大東建託の角部屋二階に住んで...
おすすめ情報