Python ve Selenium kullanarak dinamik bir web sitesini kazıma.
Giriş
Bir süre önce, otel rezervasyonları için İspanyol bir web sitesinden veri toplamam gereken bir görev verildi. Bu tür görevlerle karşılaştığımızda birkaç seçeneğimiz var, Güzel çorba, Scrapy ve Selenium. Güzel çorba, dinamik web siteleriyle pek iyi çalışmaz ve scrapy komut dosyasının çalışma şeklini tercih etmiyorum. Bağlantıları hemen koymaya başladığınız scrapy ve diğer yöntemlerin aksine, selenium'da önce görev için kullanmak istediğiniz tarayıcı için bir Web sürücüsü edinmeniz gerekir.
Proje için sistem kurulumu
Herhangi bir projeye başlamadan önceki en önemli adım, sisteminizi projeye hazır hale getirmektir. Proje kurulumu için izlenecek adımlar şunlardır:
- Python - Python'u buradan indirebilirsiniz . Ayrıca kurarken yola python eklediğinizden emin olun.
- Proje dizininizde bir sanal ortam oluşturun. kullanarak sanal ortam oluşturabilirsiniz.
python -m venv [name you want to give to your environment]. - Sanal ortamınızı etkinleştirin.
[environment name]\Scripts\activateŞimdiye kadar proje dizininde olduğunuzu ve sanal ortamınızı etkinleştireceğinizi varsayıyorum . - Şimdi bu ortamda selenium kuracaksınız.
pip install selenium==<required version>gerekli selenium sürümünü kuracaktır. Proje için sürüm 3'ü kullandım. - Kullandığınız chrome sürümüne bağlı olarak bir chrome sürücüsü edinin. Sürücünüzü buradan alabilirsiniz .
Ayıklanan veriler "Data" dizinine ve indirdiğimiz sürücü "driver" dizinine gider.
Şimdi, ana dizinin içinde, verileri web sitesinden sıyırmak için komut dosyasını yazacağınız bir python dosyası oluşturacaksınız.
Gerekli kütüphaneleri içe aktararak başlayacağız:
Komut dosyasını başlatmak için önce selenium.webdriveraşağıdaki şekilde kullanarak bir sürücü nesnesi oluşturacağız:
driver = webdriver.Chrome(executable_path ='data/chromedriver.exe')
Verilerini toplamak istediğimiz site rentia ve bu adreste bulunabilir “https://es.rentalia.com/”
komutu kullanarak önce sürücünün web sitesine erişmesini sağlayacağızdriver.get('https://es.rentalia.com/')
Artık sürücü web sitesine girdikten sonra, bulunduğu web sayfasında bulunan tüm html öğelerine erişebilir. Web sayfasında bulunan öğelere erişmek için kullanabileceğimiz işlevleri öğrenmek için bu bağlantıya başvurabilirsiniz-”https://iqss.github.io/dss-webscrape/finding-web-elements.html”.
Şimdiye kadar selenium webdriver'daki öğe seçici işlevine aşina olmalısınız ve bir sonraki adım, verilerinizi almak istediğiniz öğelerin referanslarını almaktır. Bunun için tarayıcınızda geliştirici seçeneklerini açmanız yeterlidir F12, seçmek istediğiniz öğeye basmanız veya sağ tıklamanız yeterlidir ve tıkladığınızda inceleme seçeneği bulacaksınız ve bunun için html koduna yönlendirileceksiniz. Bu koddan sınıf adını, html'yi, id'yi alabilirsiniz veya X-path'i, X-path'i code html öğesine tıklandığında görüntülenen menüden elde edebilirsiniz.
X yolunu şu şekilde elde edersiniz:
İşlemden başlayarak:
İlk ve en önemli nokta, web sürücünüzü çalıştıracağınız tarayıcıda web sitesini açın ve işlemleri gözlemlemeye başlayın.
Örneğin, sayfa yüklendiği anda çerezleri kabul etmek için bir düğme vardır. İçerideki içerikle yalnızca o düğmeyi tıkladıysanız etkileşim kurabileceksiniz.
Şimdi, bir kez geçtikten sonra, veriye ihtiyacınız olan alan için sonuçları almak için girdileri doldurmanız gerekecek. Sonuç sayfası, gecelik fiyat, konum, kısa bir açıklama vb. Bu nedenle, numarayı almak için her otel odasının ayrıntılar sayfasına gitmemiz gerekecek.
Komut dosyasının oluşumunu aşağıdaki adımlara ayırdım:
- Web sayfasına gitmek için şartları kabul etmek için düğmeye erişme.
#clicking the accepting button
cookies_btn = driver.find_element('xpath', '//*[@id="didomi-host"]/div/div/div/div//div[2]/button[2]')
cookies_btn.click()
# we used xpath to access the element and once we get the object made for the element we can click simply by adding click() method.
# inputing the locations from the given list
input_field.send_keys(loc)
ActionChains(driver).send_keys(Keys.DOWN).send_keys(Keys.ENTER).perform()
# we replicated the interaction we make to input and submit the query in the input bar using action chains
Her sitenin verilerini elde etmek için, sahip olduğumuz değişkenlere göre yalnızca başlıkları olan bir tablo oluşturmak için bir yazma ifadesinin içine döngü ekledim ve ardından döngü devam ederken kod, tanımladığımız ve ayıklama için kullandığımız yer tutucudan gelen verilerle satırları doldururdu. Veri toplamada iyi ve verimli çalışmasını sağlamak için eklediğim birkaç şey daha vardı, bitmiş kodu burada bulabilirsiniz . Örneğin, komut dosyasını kullanıcıdan argüman olarak alacak şekilde yaptım, gerekli tüm bilgileri o depoda alacaksınız. Ancak oradan kod almadan önce, bunu kendi başınıza uygulamanızı isterim.
Ayrıca, bir csv dosyasındaki verileri almak için standart bir kural yoktur, bu yüzden ilginç olduğunu düşündüğünüz şeyi yapın.
Umarım bu yardımcı olmuştur!

![Bağlantılı Liste Nedir? [Bölüm 1]](https://post.nghiatu.com/assets/images/m/max/724/1*Xokk6XOjWyIGCBujkJsCzQ.jpeg)



































