Beranda BlogPengikisan web Ekstraksi data Airbnb: Tanpa kode, tanpa API, dan tanpa metode Python

Ekstraksi data Airbnb: Tanpa kode, tanpa API, dan tanpa metode Python

oleh Kadek

Airbnb adalah platform pemesanan akomodasi online yang memungkinkan orang menyewa atau menyewakan rumah, apartemen, kamar, atau jenis akomodasi lainnya untuk masa menginap jangka pendek. Hal ini memungkinkan wisatawan menemukan berbagai pilihan akomodasi di berbagai belahan dunia, termasuk hotel, apartemen, dan rumah liburan.

Pengguna dapat menelusuri opsi yang tersedia, membaca ulasan dari tamu lain, memesan akomodasi, dan menghubungi tuan rumah secara langsung melalui platform. Dengan menggunakan scraper Anda bisa mendapatkan informasi tentang properti, ulasan dan penilaian, tuan rumah, pemesanan dan ketersediaan.

Informasi mengenai properti yang tersedia dapat berguna tidak hanya bagi wisatawan yang rajin bepergian dan wisatawan yang sering melakukan perjalanan bisnis, namun juga bagi agen real estat dan investor swasta yang dapat menggunakan properti lain di area tersebut untuk memahami fasilitas dan harga apa yang ditawarkan pesaing untuk mengembangkan penawaran mereka.

Pada artikel ini, kita akan membahas metode pengumpulan data Airbnb yang dapat digunakan baik oleh mereka yang hanya ingin mengambil data maupun mereka yang hanya ingin mengotomatiskan pengumpulan data dan mengembangkan solusi berbasis Python dengan pendekatan berbeda.

Scraping vs. Menggunakan API: Memahami Opsi

Saat mengumpulkan data dari situs web, API resmi adalah opsi pertama yang perlu dipertimbangkan. Metode ini biasanya menyediakan akses data lengkap tanpa memerlukan solusi. Meskipun API mungkin tidak menyediakan semua data, pengembang umumnya lebih suka menggunakannya.

Scraper digunakan ketika API resmi tidak tersedia atau tidak nyaman. Dalam hal ini, pengembang dapat membuat scraper dalam bahasa pemrograman apa pun untuk mengumpulkan data yang diperlukan secara otomatis. Bagian ini menjelaskan pro dan kontra pembuatan scraper Python, API Airbnb, dan alternatifnya.

Pro dan Kontra Pengikisan Airbnb

Sebelum mendalami pengembangan skrip, penting untuk memahami pro dan kontra dari scraping Airbnb. Demi kenyamanan Anda, kami telah menyusun tabel komprehensif yang merangkum pertimbangan utama:

Manfaat Pengikisan Airbnb

Kerugian dari Pengikisan Airbnb

1. Fleksibilitas: Dapat mengekstrak data apa pun dari daftar Airbnb.

1. Ketidakstabilan: Perubahan situs web dapat merusak skrip pengikisan.

2. Kustomisasi: Kemampuan untuk menyesuaikan ekstraksi data dengan kebutuhan spesifik.

2. Stabilitas: Scraping mungkin kurang stabil dibandingkan menggunakan API karena dapat dipengaruhi oleh perubahan dan pembaruan situs web.

3. Kemandirian: Tidak bergantung pada ketersediaan atau batasan API Airbnb.

3. Kompleksitas teknis: Scraping memerlukan pengetahuan dan pemeliharaan pemrograman.

4. Efektivitas biaya: Scraping bisa lebih hemat biaya dibandingkan dengan biaya akses API.

4. Pembatasan Tarif: Pembatasan tarif yang diberlakukan Airbnb mungkin berlaku saat melakukan scraping, sehingga memengaruhi kecepatan pengambilan data.

5. Akses ke data tersembunyi: Dapat mengakses data yang tidak diungkapkan melalui API Airbnb.

5. Risiko Pemblokiran: Airbnb mungkin membatasi akses atau alamat IP.

6. Data real-time: Bisa mendapatkan data terkini langsung dari website.

6. Deteksi captcha dan bot: Airbnb mungkin mengambil tindakan untuk mendeteksi aktivitas pengikisan.

Berikut adalah gambaran seimbang mengenai pro dan kontra dari pengambilan data dari daftar Airbnb. Anda harus mempertimbangkan faktor-faktor ini dengan cermat saat memutuskan apakah akan mengambil data dari Airbnb atau mempertimbangkan metode alternatif dalam mengakses data.

Menjelajahi alternatif: API Airbnb dan solusi pihak ketiga

Seperti disebutkan, cara termudah untuk mendapatkan data dari layanan ini adalah melalui API resmi, dan Airbnb memilikinya. Namun kecil kemungkinan operasi tersebut akan berhasil. Jika Anda membuka halaman resmi API Airbnb, Anda akan menemukan informasi berikut di bagian FAQ:


Menggunakan API Airbnb
Menggunakan API Airbnb

Jadi API resmi bukanlah suatu pilihan, tetapi kami memiliki solusi alternatif. Untuk mempermudah proses pengambilan data dari Airbnb, Anda dapat menggunakan layanan pihak ketiga untuk mengumpulkan data tersebut. Jika Anda hanya memerlukan kumpulan data yang sudah dibuat sebelumnya, Anda tidak perlu menulis skrip. Sebagai gantinya, Anda bisa menggunakan scraper tanpa kode Airbnb kami.


Pengikis tanpa kode Airbnb
Pengikis tanpa kode Airbnb

Untuk mendapatkan data, Anda hanya perlu menentukan parameter yang paling diperlukan:

  1. Batas baris hasil. Masukkan jumlah baris hasil yang ingin Anda terima.
  2. Sasaran. Masukkan kota tempat Anda ingin mencari penawaran.
  3. Tanggal check-in. Masukkan tanggal check-in dalam format yyyy-mm-dd.
  4. Periksa tanggalnya. Masukkan tanggal check-out dengan format yang sama.

Setelah menentukan semua parameter yang diperlukan, klik tombol “Run Scraper” untuk memulai proses pengumpulan data. Jika proses sudah selesai, Anda dapat mendownload data dalam format JSON, CSV atau XLSX di sisi kanan layar.

Contoh data yang Anda terima:


Dokumen yang dihasilkan
Dokumen yang dihasilkan

Opsi ini mungkin lebih nyaman jika Anda hanya perlu mengambil data. Namun, jika Anda ingin membuat aplikasi sendiri yang terus-menerus menerima data terkini, kami akan memberi tahu Anda cara melakukannya di bawah.

Kikis daftar menggunakan API Airbnb tidak resmi

Mari kita mulai dengan opsi yang lebih sederhana yaitu menggunakan API Airbnb HasData untuk mengambil data tempat dan menganalisisnya menggunakan Python. API ini mengembalikan respons JSON dalam format berikut:

- requestMetadata
    - id
    - status
    - url
- properties (array of objects)
    - id
    - url
    - title
    - name
    - roomType
    - listingType
    - latitude
    - longitude
    - photos (array of URLs)
    - rating
    - reviews
    - badges
    - price
      - originalPrice
      - discountedPrice
      - qualifier
      - breakdown  

Untuk menggunakannya, masuk dan salin kunci API pribadi Anda:


Salin kunci API Anda
Salin kunci API Anda

Mari kita lanjutkan ke pembuatan scraper. Jika Anda ingin mendapatkan script yang dihasilkan, buka Google Colaboratory.

Sebelum kita mulai, pastikan Anda telah menginstal Python 3.10 atau lebih baru. Ini merupakan persyaratan untuk semua skrip yang akan kami gunakan. Untuk menginstal perpustakaan yang diperlukan, buka prompt perintah atau terminal dan jalankan perintah berikut:

pip install requests pandas

Buat proyek baru dan impor perpustakaan:

import requests
import json

Tetapkan parameter pencarian Anda ke daftar pencarian:

location = "New York"
check_in = "2024-03-28"
check_out = "2024-03-30"

Berikan header permintaan dengan kunci API HasData Anda:

headers = {
  'x-api-key': 'YOUR-API-KEY'
}

Buat URL dengan parameter yang ditentukan sebelumnya:

url = f"https://api.scrape-it.cloud/scrape/airbnb/listing?&location={location}&checkIn={check_in}&checkOut={check_out}"

Buat sebuah permintaan:

response = requests.get(url, headers=headers)

Mari kita lihat apakah kita mendapat jawaban positif. Jika ya, kami menyimpan data dalam format JSON. Jika tidak, pesan kesalahan akan muncul:

if response.status_code == 200:
    data = response.json()
    with open('airbnb_listing.json', 'w') as json_file:
        json.dump(data, json_file)
    print("Saved to 'airbnb_listing.json'")
else:
    print(f"Error: {response.status_code}")

Hasilnya, kami mendapatkan objek JSON:

{
    "requestMetadata": {
        "id": "a9b4c918-0d73-447d-bc29-009035e4efcc",
        "status": "ok",
        "url": "https://www.airbnb.com/s/New%20York/homes?checkin=2024-03-28&checkout=2024-03-30"
    },
    "properties": (
        {
            "id": "691676460109271194",
            "url": "https://www.airbnb.com/rooms/691676460109271194",
            "title": "Loft in New York",
            "name": "SoHo View Room (Full-Size Bed) in Hotel Comfort",
            "roomType": "entire_home",
            "listingType": "REPRESENTATIVE",
            "latitude": 40.71806,
            "longitude": -74.00095,
            "photos": (
                "https://a0.muscache.com/im/pictures/prohost-api/Hosting-691676460109271194/original/82824443-8970-4061-94bd-4524d6caee3c.jpeg?im_w=720",               "https://a0.muscache.com/im/pictures/miso/Hosting-691676460109271194/original/1818d3a5-8578-4a59-a9b7-63786541f7d5.jpeg?im_w=720"
            ),
            "rating": 4.56,
            "reviews": 1175,
            "badges": (
            ),
            "price": {
                "originalPrice": "$210",
                "discountedPrice": "$157",
                "qualifier": "night",
                "breakdown": (
                )
            }
        },
... (other listings)
)

Dengan menggunakan API Airbnb, Anda tidak hanya mendapatkan semua data yang dibutuhkan dengan cepat, namun Anda juga dapat menghindari potensi penyumbatan, menyederhanakan kode, dan fokus pada analisis data daripada pengumpulan data.

Mengikis data properti Airbnb menggunakan API

Anda juga dapat menggunakan API Airbnb untuk mengambil data tidak hanya tentang pencarian tetapi juga untuk properti tertentu. Ini akan memberi Anda informasi lebih detail.

Mari kita gunakan titik akhir yang berbeda dan sedikit memodifikasi skrip kita untuk mengulangi serangkaian properti yang telah ditentukan sebelumnya. Anda dapat menemukan skrip yang sudah selesai di Google Colaboratory.

Awal skrip tetap sama:

import requests
import json

Kemudian buat variabel untuk menyimpan data:

data_list = ()

Ini diperlukan untuk menyimpan semua data dalam satu file. Anda juga harus menyediakan kunci HasData API dan link ke properti yang ingin Anda cari:

properties=("https://www.airbnb.com/rooms/946842435422127304", "https://www.airbnb.com/rooms/49662898")
headers = {
'x-api-key': 'YOUR-API-KEY'
}

Buka tautan:

for property in properties:

Kirim permintaan ke API:

    url = f"https://api.scrape-it.cloud/scrape/airbnb/property?url={property}"

    response = requests.get(url, headers=headers)

Proses respons jika berhasil:

    if response.status_code == 200:
        data = response.json()

Pada titik ini kita dapat:

  1. Simpan data untuk properti saat ini dalam file terpisah.
  2. Tambahkan ke variabel sehingga setelah melintasi semua tautan kita dapat menyimpan semua data dalam satu file JSON.

Untuk menyimpan data dalam file terpisah, gunakan kode berikut:

        with open(f'airbnb_property_{data("property")("id")}.json', 'w') as json_file:
            json.dump(data, json_file)

Untuk menyimpan data untuk digunakan nanti, simpan dalam variabel:

        data_list.append(data('property'))

Dengan cara ini, skrip Anda mengulangi semua tautan dan menyimpan data terperinci untuk setiap penawaran. Untuk mendapatkan file akhir dengan semua data, gunakan kode berikut:

with open('airbnb_properties.json', 'w') as json_file:
    json.dump(data_list, json_file)

Kode yang Anda miliki sekarang berfungsi, tetapi ada beberapa cara untuk memperbaikinya di masa mendatang dan menyimpan data bukan dalam JSON tetapi dalam format yang lebih nyaman. Alternatifnya, Anda bisa menambahkan kemampuan untuk mendapatkan daftar URL dari file, bukan variabel.

Mengikis Airbnb dengan Browser Tanpa Kepala

Jika Anda ingin menggunakan cara yang lebih canggih dan menulis scraper Anda sendiri, Anda memerlukan browser tanpa kepala. Ini meniru perilaku pengguna dan memungkinkan Anda menavigasi situs dan mengumpulkan data.

Mengikis tanpa API sulit dilakukan karena konten Airbnb dibuat secara dinamis. Mencoba menggunakan permintaan sederhana untuk mengambil data dari halaman tidak akan berhasil. Namun jika Anda ingin mencobanya sendiri, kami telah menyediakan skrip di Google Collaboratory yang dapat Anda gunakan untuk mencoba menggores halaman menggunakan Requests, BeautifulSoup, atau Scrapy dan menyimpan HTML yang dihasilkan ke sebuah file. Hasilnya akan terlihat jelas:


Hasil
Hasil

Oleh karena itu, kami tidak akan mempertimbangkan opsi ini dan beralih ke solusi yang lebih efektif: menggunakan browser tanpa kepala dan perpustakaan Selenium.

Instal perpustakaan yang diperlukan

Kita hanya memerlukan dua perpustakaan untuk membuat web scraper: Selenium dan Pandas. Mari kita instal menggunakan manajer paket:

pip install selenium pandas

Untuk Selenium, Anda mungkin juga perlu mengunduh dan menginstal driver web secara terpisah. Namun, hal ini tidak diperlukan di versi terbaru. Jika Anda belum pernah menggunakan browser tanpa kepala sebelumnya, lihat blog kami untuk artikel tentang scraping dengan Selenium.

Pahami struktur situs web Airbnb

Sebelum kita mulai, perlu disebutkan bahwa Anda juga dapat menemukan skrip yang sudah selesai di Google Collaboratory. Anda dapat mengunduh dan menjalankannya di PC Anda sendiri karena Google tidak mengizinkan Driver Web dijalankan di Colab Research.

Sekarang mari masuk ke situs Airbnb, tentukan parameter pencarian akomodasi dan lihat data apa yang bisa kita ekstrak:


daftar Airbnb
daftar Airbnb

Jadi saat kami mengekstrak data dari halaman pencarian Airbnb, kami mendapatkan informasi berikut:

  1. hak milik.
  2. Jumlah ruangan.
  3. Harga. Airbnb akan mengembalikan harga untuk satu malam dan jumlah hari yang ditentukan.
  4. Evaluasi. Parameter ini tidak tersedia untuk semua entri dan harus diperhitungkan saat melakukan scraping.

Hal selanjutnya yang harus Anda perhatikan adalah linknya. Secara umum, permintaan yang kami buat sebelumnya terlihat seperti ini:

https://www.airbnb.com/?tab_id=home_tab&refinement_paths%5B%5D=%2Fhomes&search_mode=flex_destinations_search&flexible_trip_lengths%5B%5D=one_week&monthly_start_date=2024-04-01&monthly_length=3&monthly_end_date=2024-07-01&category_tag=Tag%3A789&price_filter_input_type=0&channel=EXPLORE&date_picker_type=calendar&checkin=2024-03-30&checkout=2024-04-02&source=structured_search_input_header&search_type=filter_change

Atau formulir ini untuk lokasi yang ditentukan:

https://www.airbnb.com/s/New-York--United-States/homes?tab_id=home_tab&refinement_paths%5B%5D=%2Fhomes&flexible_trip_lengths%5B%5D=one_week&monthly_start_date=2024-04-01&monthly_length=3&monthly_end_date=2024-07-01&price_filter_input_type=0&channel=EXPLORE&date_picker_type=calendar&checkin=2024-03-30&checkout=2024-04-02&source=structured_search_input_header&search_type=autocomplete_click&price_filter_num_nights=3&query=New%20York%2C%20United%20States&place_id=ChIJOwE7_GTtwokRFq0uOwLSE9g

Mari kita kenali pengaturan utama yang akan kita ubah nanti:

  1. Lokasi. Di sinilah Anda ingin mencari, mis. B. “New York – Amerika Serikat”.
  2. search_mode: Ini adalah mode pencarian. “flex_destinations_search” berarti pencarian tujuan yang fleksibel.
  3. checkin: Tanggal check-in. Misal “28/03/2024” berarti 28 Maret 2024.
  4. checkout: Periksa tanggalnya. Jika “2024-04-02”, itu adalah 2 April 2024.
  5. source: Sumber pencarian. “structured_search_input_header” menentukan pencarian melalui header input terstruktur.

Pengaturan ini cukup untuk membuat tautan yang berfungsi untuk pengikisan.

Sekarang buka editor teks atau IDE favorit Anda dan buat file baru dengan ekstensi .py. Perlu diingat bahwa skrip dalam tutorial ini memerlukan Python 3.10 atau lebih baru.

Di bagian atas skrip Anda, tambahkan pernyataan import untuk perpustakaan yang akan Anda gunakan:

import pandas as pd
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

Kemudian atur parameter yang diinginkan:

city = str("New York").replace(' ', '-')
country = str("United States").replace(' ', '-')
checkin = "2024-03-28" #yyyy-mm-dd
checkout = "2024-04-02"
Configure the web driver settings and parameters, and then launch it:
service = Service('C:\driver\chromedriver.exe')
service.start()
options = Options()
options.headless = True 
driver = webdriver.Chrome(service=service, options=options)

Untuk mencegah kesalahan mengganggu eksekusi program, kami menggunakan a try Memblokir. Ini memungkinkan kode Anda melewati kesalahan dan terus mengeksekusi:

try:

Kemudian buat URL permintaan:

    base_url="https://www.airbnb.com/s/"
    query = f"{city}--{country}/homes"
    url = f"{base_url}{query}?checkin={checkin}&checkout={checkout}&source=structured_search_input_header"

Kunjungi melalui tautan:

    driver.get(url)

Dan tunggu elemen iklan:

    WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.CSS_SELECTOR, '(data-testid="card-container")')))

Dapatkan semua properti di halaman:

    listings = driver.find_elements(By.CSS_SELECTOR, '(data-testid="card-container")')

Sebelum kita menulis ke file, kita perlu menyimpan datanya di suatu tempat. Mari buat variabel untuk ini:

   data = ()

Telusuri semua iklan di halaman dan kumpulkan data yang diperlukan:

    for listing in listings:
        href = listing.find_element(By.TAG_NAME, 'a').get_attribute('href')
        title = listing.find_element(By.CSS_SELECTOR, '(data-testid="listing-card-title")').text.strip()
        name = listing.find_element(By.CSS_SELECTOR, '(data-testid="listing-card-name")').text.strip()
        subtitle = listing.find_element(By.CSS_SELECTOR, '(data-testid="listing-card-subtitle")>span').text.strip()
        price_night = listing.find_element(By.CSS_SELECTOR, 'span._1y74zjx').text.strip().split(" ") if listing.find_elements(By.CSS_SELECTOR, 'span._1y74zjx') else '-'
        price_full = listing.find_element(By.CSS_SELECTOR, 'div._10d7v0r').text.strip().split(" ") if listing.find_elements(By.CSS_SELECTOR, 'div._10d7v0r') else '-'     
        data.append({'Link': href, 'Title': title, 'Name': name, 'Subtitle': subtitle, 'Price_night': price_night, 'Price_full': price_full})

Terakhir, tutup webdriver:

finally:
  driver.quit()

Ini penting karena jika Anda lupa melakukan ini, WebDriver tidak akan menutup secara otomatis dan akan terus berjalan di latar belakang.

Simpan data Airbnb

Sebelumnya, kami mengimpor perpustakaan Pandas, yang menyediakan cara mudah untuk bekerja dengan data tabel yang disimpan di DataFrames. Kami memilih perpustakaan ini karena mendukung penyimpanan data dalam format paling populer, termasuk CSV, JSON, XLSX, dan bahkan database.

Untuk menggunakannya, kami membuat DataFrame dari data yang kami kumpulkan:

df = pd.DataFrame(data)

Dan simpan data dalam format apa pun yang sesuai:

    df.to_csv(f'airbnb_{city}_{country}_listings.csv', index=False)
    df.to_json(f'airbnb_{city}_{country}_listings.json', orient="records")
    df.to_sql('listings', conn, index=False, if_exists="replace")
    df.to_excel(f'airbnb_{city}_{country}_listings.xlsx', index=False)

Hasil:


Hasil dari gesekan brawser tanpa kepala
File CSV yang dihasilkan

Selain opsi yang dibahas di atas, Pandas mendukung lebih banyak lagi, yang dapat Anda temukan di dokumentasi resmi.

Airbnb mengatasi tantangan

Saat melakukan scraping pada Airbnb, penting untuk diingat bahwa ketentuan layanan Airbnb melarang scraping situs web mereka tanpa izin tertulis dari mereka. Menggunakan alat pengikis otomatis tanpa izin dapat mengakibatkan alamat IP atau akun Anda diblokir. Untuk menghindari hal ini, Anda dapat menggunakan scraping API atau mengintegrasikan proxy ke dalam skrip Anda.

Tantangan lainnya adalah memperbarui struktur website secara berkala. Jika Airbnb mengubah struktur situs webnya, scraping mungkin menjadi tidak berguna karena skrip Anda mungkin berhenti berfungsi karena perubahan markup HTML atau CSS. Dalam kasus seperti itu, Anda harus memperbarui skrip Anda untuk beradaptasi dengan struktur situs web baru.

Berikut beberapa hal tambahan yang perlu dipertimbangkan:

  1. Gunakan API pengikisan. Ini adalah cara teraman dan paling dapat diandalkan untuk menelusuri iklan Airbnb.
  2. Gunakan proksi. Hal ini dapat membantu menyembunyikan alamat IP Anda dan menghindari deteksi oleh Airbnb.
  3. BKami siap memperbarui skrip Anda secara berkala. Airbnb memperbarui situs webnya secara berkala, jadi Anda harus bersiap memperbarui skrip Anda sebagaimana mestinya.

Dengan mengikuti tips berikut, Anda dapat mengikis data Airbnb dengan aman dan efektif.

Kesimpulan dan temuan

Dengan data yang Anda kumpulkan melalui web scraping Airbnb, Anda dapat menganalisis pasar real estat dengan lebih efektif. Anda dapat membuat layanan perbandingan harga atau sistem rekomendasi Anda sendiri dan menggunakan data ini dalam strategi pemasaran dan periklanan Anda. Misalnya, perusahaan dan pengusaha dapat menggunakan data ini untuk kampanye pemasaran dan periklanan yang ditargetkan pada kelompok yang tertarik untuk menyewa properti.

Dalam artikel ini, kami membahas proses pengambilan data web dari layanan akomodasi online populer Airbnb dan memberikan contoh skrip yang sudah jadi. Kami telah membahas pro dan kontra pengumpulan data dibandingkan dengan penggunaan API. Kami juga menjajaki metode alternatif untuk memperoleh data, termasuk menggunakan API Airbnb dan solusi pihak ketiga.

Jika Anda tidak ingin mengumpulkan data ini menggunakan Python, bahasa pemrograman lain cocok untuk web scraping. Misalnya, JavaScript (menggunakan perpustakaan Puppeteer), Ruby (menggunakan perpustakaan Nokogiri), dan Go (menggunakan perpustakaan Colly) bisa menjadi alternatif yang baik. Selain itu, Anda dapat menggunakan scraper tanpa kode bawaan dari Airbnb yang menyediakan antarmuka pengguna untuk mengambil data tanpa coding.

Pos terkait

Tinggalkan Komentar