Menggores situs web dinamis menggunakan Python dan Selenium.
pengantar
Beberapa waktu lalu saya diberi tugas di mana saya perlu mengumpulkan data dari situs Spanyol untuk pemesanan hotel. Kami memiliki beberapa pilihan ketika kami menemukan tugas-tugas semacam ini, Sup yang indah, Scrapy dan selenium. Sup yang indah tidak bekerja dengan baik dengan situs web dinamis, dan saya tidak suka cara kerja skrip scrapy. Tidak seperti scrapy dan metode lain di mana Anda langsung mulai meletakkan tautan, di Selenium Anda harus terlebih dahulu mendapatkan Webdriver untuk browser yang ingin Anda gunakan untuk tugas tersebut.
Menyiapkan sistem untuk proyek
Langkah terpenting sebelum kami memulai proyek apa pun adalah menyiapkan sistem Anda untuk proyek tersebut. Berikut adalah langkah-langkah yang harus diikuti untuk penyiapan proyek:
- Python - Anda dapat mengunduh python dari sini . Pastikan juga Anda menambahkan python ke path saat menginstalnya.
- Buat lingkungan virtual di direktori proyek Anda. Anda dapat membuat lingkungan virtual menggunakan
python -m venv [name you want to give to your environment]. - Aktifkan lingkungan virtual Anda. Saya berasumsi Anda berada di direktori proyek sekarang dan
[environment name]\Scripts\activateakan mengaktifkan lingkungan virtual Anda. - Sekarang, di lingkungan ini Anda akan menginstal selenium.
pip install selenium==<required version>akan menginstal versi Selenium yang Anda perlukan. Saya telah menggunakan versi 3 untuk proyek ini. - Dapatkan driver chrome tergantung pada versi chrome yang Anda gunakan. Anda bisa mendapatkan driver Anda dari sini .
Data yang diekstraksi masuk ke dalam direktori "Data" dan driver yang kami unduh masuk ke dalam direktori "driver".
Sekarang, di dalam direktori utama Anda akan membuat file python tempat Anda akan menulis skrip untuk mengikis data dari situs web.
Kami akan mulai dengan mengimpor pustaka yang diperlukan:
Untuk memulai skrip, pertama-tama kita akan membuat objek driver menggunakan selenium.webdrivercara berikut:
driver = webdriver.Chrome(executable_path ='data/chromedriver.exe')
Situs tempat kami ingin mengumpulkan data adalah rentalia dan dapat ditemukan di alamat ini “https://es.rentalia.com/”
kami akan membuat driver terlebih dahulu mengakses situs web menggunakan perintahdriver.get('https://es.rentalia.com/')
Sekarang setelah driver ada di situs web, ia dapat mengakses semua elemen html yang ada di halaman web tempat ia berada. Anda dapat merujuk tautan ini untuk mengetahui tentang fungsi yang dapat kami gunakan untuk mengakses elemen yang ada di halaman web- ”https://iqss.github.io/dss-webscrape/finding-web-elements.html”.
Anda harus terbiasa dengan fungsi pemilih elemen di selenium webdriver sekarang dan langkah selanjutnya adalah mendapatkan referensi elemen dari mana Anda ingin mendapatkan data Anda. Untuk itu Anda hanya perlu membuka opsi pengembang di browser Anda, Anda cukup menekan F12atau klik kanan pada elemen yang ingin Anda pilih dan Anda akan menemukan opsi untuk memeriksa setelah mengklik yang mana Anda akan diarahkan ke kode html untuk itu. Dari kode itu Anda bisa mendapatkan nama kelas, html, id, atau jalur-X, jalur-X dapat diperoleh di menu yang ditampilkan saat mengklik elemen kode html.
Inilah cara Anda mendapatkan jalur-X:
Dimulai dengan proses:
Poin pertama dan terpenting adalah membuka situs web di browser tempat Anda akan membuat driver web Anda berfungsi dan mulai mengamati proses.
Misalnya, ada tombol untuk menerima cookie saat halaman dimuat. Anda hanya dapat berinteraksi dengan konten di dalamnya jika Anda telah mengklik tombol tersebut.
Sekarang setelah Anda melewatinya, Anda harus mengisi input untuk mendapatkan hasil untuk area yang Anda perlukan datanya. Halaman hasil akan memiliki daftar hotel dengan informasi kamar seperti, harga per malam, lokasi, deskripsi singkat, dll. Satu hal yang tidak ada di halaman itu adalah nomor kontak yang dapat Anda gunakan untuk menanyakan tentang kamar. Jadi kita harus pergi ke halaman detail di setiap kamar hotel untuk mendapatkan nomornya.
Saya telah membagi pembentukan skrip menjadi langkah-langkah berikut:
- Mengakses tombol untuk menerima persyaratan untuk masuk ke halaman web.
#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
Untuk mendapatkan data untuk setiap situs, saya menyertakan loop di dalam pernyataan tulis untuk menghasilkan tabel dengan hanya header sehubungan dengan variabel yang kami miliki dan kemudian saat loop berlanjut, kode akan mengisi baris dengan data dari placeholder yang kami tentukan dan gunakan untuk ekstraksi. Ada beberapa hal lagi yang saya tambahkan untuk membuatnya bekerja dengan baik dan efisien dalam pengumpulan data, Anda dapat menemukan kode yang sudah selesai di sini . Misalnya, saya telah membuat skrip untuk mengambil masukan dari pengguna sebagai argumen, Anda akan mendapatkan semua informasi yang diperlukan di repositori itu. Tapi sebelum mendapatkan kode dari sana, saya ingin Anda mengimplementasikannya sendiri.
Selain itu, tidak ada aturan standar untuk mendapatkan data dalam file csv, jadi lakukan apa yang menurut Anda menarik.
Saya harap ini membantu!

![Apa itu Linked List? [Bagian 1]](https://post.nghiatu.com/assets/images/m/max/724/1*Xokk6XOjWyIGCBujkJsCzQ.jpeg)



































