id
English
Español
中國人
Tiếng Việt
Deutsch
Українська
Português
Français
भारतीय
Türkçe
한국인
Italiano
Gaeilge
اردو
Polski 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.
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:
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.
Sebelum Anda mulai melakukan pengkodean, tentukan parameter inti proyek Anda untuk menghindari masalah umum dan memastikan operasi yang stabil.
Alat yang terencana dengan baik akan bekerja dengan andal, menggunakan sumber daya secara efisien, dan memberikan hasil berkualitas tinggi.
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.
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.
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.
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
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
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)
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