• DİKKAT

    DOSYA İndirmek/Yüklemek için ÜCRETLİ ALTIN ÜYELİK Gereklidir!
    Altın Üyelik Hakkında Bilgi

Selenium Web_Driver ile Google Maps Veri Çekme İşlemi

Katılım
10 Ocak 2016
Mesajlar
36
Excel Vers. ve Dili
Office 2019
Arkadaşlar MErhaba,

Aşağıda sizlere Google Maps üzerinden aramasını istediğiniz yerlerin veri çekme işlemi ile ilgili kodum mevcut. Burada sorunum aranan veride ki 7. satırda ki path doğru olduğu hata veriyor ben bu konuda tıkandığım için sizlerin yardımına ihtiyacım var.

Bu konuda destek gösteren göstermeyen tüm arkadaşlarımıza çok teşekkür ediyorum.

Kod:
Sub Google_Maps()
Dim baglan As New Selenium.WebDriver


i = 5 'Burada satırı sabitlemek için
sayi = 0

'--------&& Bağlantı Yollarını Tanımlıyoruz &&-------------
  baglan.Start "chrome"
  baglan.Get "https://www.google.com.tr/maps?q="
'---------------------------------------------------------

baglan.FindElementById("searchboxinput").SendKeys Sheets("Google Map Tarayıcı").Range("C3")  'Excel arama kutucuğunu belirtiyoruz.
baglan.Wait 5000  '5 sn bekliyoruz.

baglan.FindElementById("searchbox-searchbutton").Click   'Arama yapma butonuna tıklıyoruz.
baglan.Wait 8000  '8 sn bekliyoruz.

'---------------------------------------------------------

For x = 1 To 20 Step 2

baglan.FindElementByXPath("//*[@id='pane']/div/div[1]/div/div/div[4]/div[1]/div[" & x & "]/div/a").Click
baglan.Wait 5000  '5 sn bekliyoruz.

    If i < 26 Then  'Burada ilk sıraya göre verinin gelmesini sağlamak.
    i = i + 1

    If sayi < 26 Then  'Burada sıra numarasını saydırıyoruz.
    sayi = sayi + 1

        Cells(i, 1).Value = sayi
        
        Cells(i, 2).Value = baglan.FindElementByXPath("//*[@id='pane']/div/div[1]/div/div/div[2]/div[1]/div[1]/div[1]/h1").Text 'İsim
        Cells(i, 3).Value = baglan.FindElementByXPath("//*[@id='pane']/div/div[1]/div/div/div[7]/div[1]/button/div[1]/div[2]").Text 'Adres
        Cells(i, 6).Value = baglan.FindElementByXPath("//*[@id='pane']/div/div[1]/div/div/div[7]/div[4]/button/div[1]/div[2]/div[1]").Text 'Telefon No
        Cells(i, 7).Value = baglan.FindElementByXPath("//*[@id='pane']/div/div[1]/div/div/div[7]/div[3]/button").Text 'Web Sitesi
        Cells(i, 8).Value = baglan.FindElementByXPath("//*[@id='pane']/div/div[1]/div/div/div[2]/div[1]/div[1]/div[2]/div/div[2]/span[1]/span[1]/button").Text 'Lokasyon Bilgisi
        Cells(i, 9).Value = baglan.FindElementByXPath("//*[@id='pane']/div/div[1]/div/div/div[7]/div[2]/div[1]/div/div[1]/span[1]/span[2]").Text 'Lokasyon Durumu

    baglan.Wait 3000  '3 sn bekliyoruz.
    baglan.FindElementByXPath("//*[@id='omnibox-singlebox']/div[1]/div[3]/div/div[1]/div/div/button/span").Click  'Sonuca geri dön
    baglan.Wait 1000  '1 sn bekliyoruz.

    End If
    
End If
Next x

baglan.Wait 5000  '5 sn bekliyoruz

    
'Stop
End Sub


Hata Mesajına ait görseli görmek isteyen arkadaşlarımız için; Google Drive Linkini paylaşıyorum.

Link; https://drive.google.com/file/d/1xkUk2_d0vvE2UAPIqPLH-bru5bNYcN7z/view?usp=sharing
 
Merhaba uygun bir zamanda inceleyip size dönüş yapacağım.
Sanıyorum kodları yeniden düzenlemek gerekiyor çünkü başka bir arama yapınca adresler değiştiği için yazılan kodlar çalışmıyor.
 
Çalışmanızda amaç ilk 20 aramayı mı almak yoksa sonraki sayfalardan da veri çekilecek mi?
 
Merhaba uygun bir zamanda inceleyip size dönüş yapacağım.
Sanıyorum kodları yeniden düzenlemek gerekiyor çünkü başka bir arama yapınca adresler değiştiği için yazılan kodlar çalışmıyor.

Yunus Bey,

Şimdiden ilginiz için ve ayıracağınız zaman için çok teşekkür ederim.
 
Çalışmanızda amaç ilk 20 aramayı mı almak yoksa sonraki sayfalardan da veri çekilecek mi?

Merhaba Efendim,

Yaptığım çalışmada aranan tüm sayfalarda ki verileri çekmesi gerekiyor. Sadece ilk 20'yi baz almaması lazım, diğer sayfalardaki verileri de almak istiyorum.
 
Kodunuz sanki ilk 20 için yazılmış gibi. ( For x = 1 To 20 Step 2)
 
Sayfanın kod kısmını incelemek gerek yalnız gördüğüm kadarıyla kaç tane bulunduğu yazmıyor. bu yüzden bu döngü dışına örneğin 100 veri çekmek için 5 kere daha döngü yapmak ve alttaki ileri butonuna tıklamak gerekir. Yani sizin kodların dışında bir döngü olması gerekir. Sizin döngü (20 veri aldıktan sonra) ileri butonuna tıklaması gerekli.
 
Paylaştığım exceli indirip inceleme fırsatınız oldu mu ? Yaptığım kod içerisinde google mapsteki 8'nci veriye geldiğinde path doğru olduğu halde hata veriyor bunun nedenini çözemedim ben zaten aksi takdirde kodum ilk 7 satırlık veriyi sorunsuz bir şekilde getiriyor
 
Döngünün başında Debug.Print baglan.FindElementsByClass("EgL07d").Count çalıştırdığınız zaman 14 çıkıyor. Bu Sayfada gözüken Web sitesi ve Yol tarifi butonlarının sayısı. Yani sayfada 14/2=7 adet satır gözüküyor. 7. veriden sonra sayfa kaydırmanız gerekir.
 
Döngünün başında Debug.Print baglan.FindElementsByClass("EgL07d").Count çalıştırdığınız zaman 14 çıkıyor. Bu Sayfada gözüken Web sitesi ve Yol tarifi butonlarının sayısı. Yani sayfada 14/2=7 adet satır gözüküyor. 7. veriden sonra sayfa kaydırmanız gerekir.

Ben burada tam ne demek istediğinizi anlayamadım. Rica etsem bunu kodlama örneği ile gösterebilir misiniz ?
 
Merhaba. biraz deneme yaptım ve her defasında problem çıktı ve sayfada 20 veri varken en fazla 10 veriyi alıyor. xpath, a etiketi gibi değişik yöntemleri denedim olmadı.
Size tavsiyem aşağıdaki verdiğim linklerdeki videoları izleyin, bu eklentileri deneyin işinize yarayacaktır.
Özellikle İnstand data scraper benimde kullandığım başarılı bir eklentidir ve işinizi görecektir.


 
Alternatif olarak, Google'ın bu işler için yapılmış API'si kullanılabilir.....



.
 
Geri
Üst