Panduan Langkah-demi-Langkah untuk Membuat Perayap Web dari Awal

Komentar: 0

Web crawler digunakan untuk pemantauan harga, agregasi berita, analisis pesaing, pengindeksan mesin pencari, dan tugas-tugas lain yang membutuhkan pengumpulan data terstruktur dari situs web. Panduan ini menjelaskan cara membuat web crawler dari awal, dimulai dari perencanaan proyek dan pilihan teknologi, dan diakhiri dengan pengaturan lingkungan dan penyimpanan data. Panduan ini memberikan fondasi yang nantinya dapat Anda kembangkan ke proyek-proyek yang lebih kompleks dan berskala besar.

Apa itu Perayap Web dan Bagaimana Cara Kerjanya

Ini adalah program yang secara otomatis mengunjungi halaman web dan mengumpulkan informasi darinya. Program ini bekerja dengan mengirimkan panggilan HTTP ke sebuah situs, mengambil HTML dari setiap halaman, dan kemudian memproses HTML tersebut untuk mengekstrak data yang diperlukan. Setelah itu, ia mengikuti tautan internal dan mengulangi proses tersebut hingga mencapai batas yang telah ditentukan atau kondisi berhenti. Proses ini tidak sama dengan web scraping. Untuk perbandingan terperinci, lihat Pengikisan web vs perayapan web.

Alat-alat tersebut banyak digunakan untuk:

  • Pemantauan harga dalam e-commerce
  • mengumpulkan kontak dan daftar
  • membangun kumpulan data untuk analisis
  • mengindeks konten untuk mesin pencari

Dalam skenario ini, ketika Anda membangun web crawler Anda sendiri sering kali merupakan pendekatan yang lebih baik: Anda bisa menyesuaikan program dengan kebutuhan Anda, mengontrol frekuensi permintaan, dan menentukan informasi apa yang harus dikumpulkan dan bagaimana caranya.

Merencanakan Proyek Perayap Web

Sebelum Anda mulai melakukan pengkodean, tentukan parameter inti proyek Anda untuk menghindari masalah umum dan memastikan operasi yang stabil.

  1. Tujuan pengumpulan data. Tentukan mengapa Anda membutuhkan alat ini: pemantauan harga, pengumpulan kontak, pengindeksan konten, membangun kumpulan data analitik, dan sebagainya.
  2. Situs target dan tipe data. Tentukan sumber daya mana yang akan Anda rayapi dan informasi apa yang Anda perlukan dari sumber daya tersebut. Hal ini memengaruhi pilihan arsitektur dan teknologi Anda.
  3. Frekuensi pembaruan. Perkirakan seberapa sering Anda membutuhkan data baru untuk menghindari sistem yang membebani atau bekerja dengan informasi yang sudah ketinggalan zaman.
  4. Kendala teknis dan hukum. Periksa robots.txt, perlindungan anti-bot, undang-undang perlindungan data, dan ketentuan penggunaan situs.
  5. Pemrosesan dan penyimpanan. Tentukan dalam format apa Anda akan menyimpan informasi dan bagaimana Anda akan menganalisisnya nanti.

Alat yang terencana dengan baik akan bekerja dengan andal, menggunakan sumber daya secara efisien, dan memberikan hasil berkualitas tinggi.

Memilih Bahasa dan Alat yang Tepat

Anda bisa membangun sebuah web crawler dalam berbagai bahasa pemrograman, termasuk Python, Java, dan PHP. Python menonjol karena sintaksnya yang sederhana dan ekosistem pustaka yang kaya untuk permintaan HTTP dan penguraian HTML (seperti permintaan, BeautifulSoup, lxml). Java adalah pilihan yang solid untuk proyek-proyek berskala besar dan perusahaan. PHP lebih umum digunakan dalam pengembangan web dan kurang nyaman untuk perayap mandiri.

Untuk percobaan pertama, kita akan mempertimbangkan cara membuat web crawler di Python karena biasanya ini adalah pilihan yang optimal karena memungkinkan Anda mengimplementasikan dan menguji fungsionalitas dasar dengan cepat.

Menyiapkan Lingkungan Anda

Mulailah dengan menginstal Python dari halaman situs web resmi. Kemudian instal pustaka inti yang akan Anda gunakan: request untuk mengirim permintaan HTTP dan BeautifulSoup untuk mengurai HTML:


pip install requests beautifulsoup4

Sebaiknya Anda juga mengatur struktur proyek Anda dari awal: file terpisah untuk logika utama, konfigurasi, dan utilitas. Hal ini membuat pemeliharaan dan penskalaan di masa depan menjadi lebih mudah.

Cara Membuat Perayap Web (Contoh Kode)

Skrip dasar dapat terdiri dari tiga bagian utama: mengirim permintaan, memproses HTML, dan mengikuti tautan.


from bs4 import BeautifulSoup
import time
import random

# Configuration
url = "https://quotes.toscrape.com/"  # Replace this with your target site
headers = {
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 "
                  "(KHTML, like Gecko) Chrome/116.0.0.0 Safari/537.36"
}
timeout = 5  # server response timeout
max_retries = 3  # maximum number of retries on errors
# You can add your proxy here if needed
proxies = {
    "http": "http://username:password@proxyserver:port",
    "https": "https://username:password@proxyserver:port"
}

# Function to check access via robots.txt
def can_crawl(base_url, path="/"):
    try:
        robots_url = base_url.rstrip("/") + "/robots.txt"
        r = requests.get(robots_url, headers=headers, timeout=timeout)
        if r.status_code == 200 and f"Disallow: {path}" in r.text:
            print(f"Service {path} forbidden for scraping robots.txt")
            return False
    except requests.RequestException:
        # If robots.txt is unavailable, continue
        pass
    return True

# Main logic
if can_crawl(url):
    for attempt in range(max_retries):
        try:
            response = requests.get(url, headers=headers, timeout=timeout, proxies=proxies)
            response.raise_for_status()

            soup = BeautifulSoup(response.text, 'lxml')

            # Collect links
            links = [a['href'] for a in soup.find_all('a', href=True)]  # You can change selector here
            print("Found links:", links)

            # Delay between requests to simulate more realistic behavior
            time.sleep(random.uniform(3, 7))  # better than a fixed 5-second delay
            break  # if everything succeeds, exit the retry loop

        except requests.RequestException as e:
            print(f"Request error (attempt {attempt+1}): {e}")
            wait = 2 ** attempt
            print(f"Waiting {wait} seconds before retry...")
            time.sleep(wait)
else:
    print("The crawler cannot process this resource due to robots.txt rules")

Skrip ini menunjukkan alur kerja dasar: membuat permintaan, mengurai HTML, dan mengumpulkan tautan.

Menangani Penomoran Halaman dan Navigasi Situs

Untuk situs multi-halaman, Anda memerlukan perulangan yang berjalan melalui semua halaman. Contoh:


for page in range(1, 6):
    url = f"https://google.com/page/{page}"
    response = requests.get(url)
    soup = BeautifulSoup(response.text, 'lxml')
    # data processing

Menghargai Robots.txt dan Batas Nilai

Perayapan yang bertanggung jawab termasuk memeriksa file robots.txt situs dan mengikuti aturannya. Anda juga perlu menambahkan jeda di antara permintaan agar tidak membebani server. Dengan fungsi time.sleep(), Anda dapat menambahkan jeda di antara pengambilan halaman.


import time
from bs4 import BeautifulSoup

for page in range(1, 6):
    url = f"https://google.com/page/{page}"
    response = requests.get(url)
    soup = BeautifulSoup(response.text, 'lxml')
    # data processing
	
    time.sleep(5) # delay in seconds

Menyimpan Data yang Dikumpulkan

Anda dapat menyimpan rincian yang dikumpulkan dalam format yang mudah digunakan seperti CSV atau JSON. Misalnya, untuk menyimpan daftar tautan:


import json

data = {"links": links}
with open("links.json", "w", encoding="utf-8") as f:
    json.dump(data, f, ensure_ascii=False, indent=4)

Kesimpulan

Dengan mengikuti langkah-langkah ini, Anda akan mendapatkan sebuah web crawler dasar yang bisa Anda kembangkan untuk tugas-tugas yang lebih lanjut. Anda bisa menskalakan kode, mengintegrasikan dukungan proxy, menangani halaman dalam jumlah besar, atau beralih ke kerangka kerja yang lebih kuat seperti Scrapy untuk skenario pengumpulan data yang kompleks.

Komentar:

0 komentar