Belajar Menggunakan Python dan Sup Cantik untuk Pengikisan Web di Situs Web Dinamis

Belajar Menggunakan Python dan Sup Cantik untuk Pengikisan Web di Situs Web Dinamis
Web scraping

Mengatasi Tantangan Web Scraping di Situs E-Commerce

Pengikisan web bisa menjadi hal yang menarik sekaligus menakutkan, terutama jika Anda baru dalam prosesnya. Saya masih ingat upaya pertama saya membuat situs web dinamis—rasanya seperti mencoba membaca buku melalui kaca buram. Dengan platform seperti Beautiful Soup, kemungkinannya tidak terbatas, namun tantangan seperti menavigasi struktur HTML yang rumit dapat menguji kesabaran Anda. 🧑‍💻

Dalam skenario ini, Anda sedang berupaya mengekstraksi data dari situs web e-niaga, namun elemen HTMLnya tampak sulit dipahami. Banyak situs web, seperti yang Anda hadapi, menggunakan struktur bersarang atau konten dinamis yang membuat lokasi elemen tertentu menjadi rumit. Hal ini bisa membuat frustasi, terutama ketika Anda baru memulai dengan alat seperti Python dan Beautiful Soup.

Tapi jangan khawatir; setiap web scraper yang sukses pernah berjuang dengan rintangan yang sama. Belajar menganalisis struktur HTML, mengidentifikasi pola, dan menyempurnakan penyeleksi Anda adalah sebuah ritual dalam dunia scraping. Dengan ketekunan dan beberapa teknik yang terbukti benar, Anda akan segera menguasai seni menavigasi HTML yang paling berbelit-belit sekalipun.

Dalam artikel ini, kita akan mengeksplorasi strategi praktis untuk menavigasi HTML secara efisien dan mengekstrak elemen yang Anda perlukan. Dari memahami tag hingga bekerja dengan alat pengembang, wawasan ini akan menyiapkan Anda untuk meraih kesuksesan. Mari selami! 🌟

Memerintah Contoh Penggunaan
find_all Digunakan untuk mengambil semua contoh tag atau kelas HTML tertentu dalam dokumen HTML. Misalnya, sup.find_all("div", class_="productContainer") mengambil semua kontainer produk di halaman.
requests.get Membuat permintaan HTTP GET untuk mengambil konten HTML mentah dari URL tertentu. Contoh: respon = permintaan.get(url) mengambil halaman HTML untuk diurai.
BeautifulSoup Menginisialisasi parser HTML. Contoh: sup = BeautifulSoup(response.content, "html.parser") menyiapkan konten HTML untuk diproses lebih lanjut.
find_element Digunakan dengan Selenium untuk menemukan satu elemen pada halaman. Contoh: product.find_element(By.CLASS_NAME, "name") mengambil nama produk.
find_elements Mirip dengan find_element tetapi mengambil semua elemen yang cocok. Contoh: driver.find_elements(By.CLASS_NAME, "productContainer") mengambil semua kontainer produk untuk iterasi.
By.CLASS_NAME Strategi pencari Selenium untuk mengidentifikasi elemen berdasarkan nama kelasnya. Contoh: By.CLASS_NAME, "price" menemukan elemen dengan kelas yang ditentukan.
assertGreater Digunakan dalam pengujian unit untuk memverifikasi suatu nilai lebih besar dari yang lain. Contoh: self.assertGreater(len(product_boxes), 0) memastikan produk ditemukan selama pengikisan.
ChromeDriverManager Secara otomatis mengelola pengunduhan dan penyiapan Chrome WebDriver untuk Selenium. Contoh: driver = webdriver.Chrome(layanan=Layanan(ChromeDriverManager().install())).
text Mengambil konten teks elemen HTML. Contoh: title = product.find("div", class_="name").text mengekstrak teks yang terlihat untuk nama produk.
unittest.TestCase Kelas dari modul Python yang paling unittest yang digunakan untuk mendefinisikan kasus uji. Contoh: class TestWebScraper(unittest.TestCase) membuat rangkaian pengujian untuk scraper.

Menguraikan Solusi Pengikisan Web

Skrip pertama memanfaatkan , pustaka Python populer untuk penguraian HTML, untuk mengekstrak data dari situs e-niaga yang disediakan. Ia bekerja dengan mengambil HTML mentah menggunakan perpustakaan dan kemudian menguraikannya dengan Beautiful Soup's . Setelah HTML diuraikan, skrip mengidentifikasi elemen tertentu menggunakan tag dan nama kelas, seperti wadah produk, yang diasumsikan membungkus detail produk. Pendekatan ini efisien untuk HTML statis, tetapi bisa sulit jika situs web menggunakan konten dinamis yang dirender oleh JavaScript. Saya ingat pernah mengalami masalah serupa di situs web resep dinamis—semuanya tampak benar, namun tidak ada data yang muncul! 🧑‍💻

Dalam skrip kedua, ikut bermain. Alat ini sangat berguna untuk situs dengan konten yang dimuat melalui JavaScript. Dengan meluncurkan sesi browser nyata, Selenium mensimulasikan interaksi pengguna dengan situs. Hal ini memungkinkannya menunggu semua elemen dimuat dan kemudian mengekstrak data yang diperlukan. Misalnya, ia menemukan detail produk menggunakan pencari berbasis kelas seperti . Meskipun Selenium memberikan kemampuan yang kuat, ia memerlukan pengelolaan sumber daya yang hati-hati—seperti mengingat untuk keluar dari sesi browser—atau mungkin akan menghabiskan banyak memori, seperti yang saya pelajari saat sesi debugging larut malam ketika laptop saya macet! 🖥️

Fitur utama lainnya dari skrip ini adalah desain modularnya, sehingga mudah diadaptasi untuk berbagai kasus penggunaan. Skrip pengujian unit menggunakan Python framework memastikan bahwa setiap fungsi dalam logika scraping bekerja dengan benar. Ini memverifikasi bahwa wadah produk ditemukan dan judul serta harga diekstraksi. Hal ini sangat penting untuk menjaga keandalan saat melakukan perubahan, karena situs web sering kali memperbarui strukturnya. Suatu kali, saat membuat situs blog, saya menyadari pentingnya pengujian semacam itu—apa yang berhasil dalam satu minggu akan gagal di minggu berikutnya, dan pengujian tersebut menghemat waktu berjam-jam untuk memecahkan masalah.

Skrip ini juga dibuat dengan mempertimbangkan pengoptimalan dan penggunaan kembali. Dengan mengisolasi fungsi yang dapat digunakan kembali seperti pengambilan HTML dan penguraian elemen, fungsi tersebut dapat menangani halaman atau kategori lain di situs yang sama dengan sedikit penyesuaian. Modularitas ini memastikan bahwa perluasan proyek scraping tetap dapat dikelola. Secara keseluruhan, menggabungkan Beautiful Soup dan Selenium membekali Anda untuk menangani pengikisan konten statis dan dinamis secara efektif. Dengan kesabaran dan latihan, web scraping berubah dari tugas yang membuat frustrasi menjadi alat pengumpulan data yang bermanfaat. 🌟

Mengekstrak Data dari Situs E-Commerce Menggunakan Beautiful Soup

Menggunakan Python dan perpustakaan Beautiful Soup untuk penguraian HTML dan pengikisan web

from bs4 import BeautifulSoup
import requests

# URL of the target page
url = "https://www.noon.com/uae-en/sports-and-outdoors/exercise-and-fitness/yoga-16328/"

# Make a GET request to fetch the raw HTML content
response = requests.get(url)
soup = BeautifulSoup(response.content, "html.parser")

# Find all product boxes
product_boxes = soup.find_all("div", class_="productContainer")

for product in product_boxes:
    # Extract the title
    title = product.find("div", class_="name").text if product.find("div", class_="name") else "No title"
    # Extract the price
    price = product.find("div", class_="price").text if product.find("div", class_="price") else "No price"
    print(f"Product: {title}, Price: {price}")

Pengikisan Konten Dinamis dengan Selenium

Menggunakan Python dengan Selenium untuk menangani konten yang dirender JavaScript

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.chrome.service import Service
from webdriver_manager.chrome import ChromeDriverManager

# Set up Selenium WebDriver
driver = webdriver.Chrome(service=Service(ChromeDriverManager().install()))
url = "https://www.noon.com/uae-en/sports-and-outdoors/exercise-and-fitness/yoga-16328/"
driver.get(url)

# Wait for the products to load
products = driver.find_elements(By.CLASS_NAME, "productContainer")

for product in products:
    try:
        title = product.find_element(By.CLASS_NAME, "name").text
        price = product.find_element(By.CLASS_NAME, "price").text
        print(f"Product: {title}, Price: {price}")
    except:
        print("Error extracting product details")

driver.quit()

Tes Unit untuk Pengikis Sup yang Cantik

Menggunakan modul terkecil Python untuk memvalidasi logika pengikisan

import unittest
from bs4 import BeautifulSoup
import requests

class TestWebScraper(unittest.TestCase):
    def setUp(self):
        url = "https://www.noon.com/uae-en/sports-and-outdoors/exercise-and-fitness/yoga-16328/"
        response = requests.get(url)
        self.soup = BeautifulSoup(response.content, "html.parser")

    def test_product_extraction(self):
        product_boxes = self.soup.find_all("div", class_="productContainer")
        self.assertGreater(len(product_boxes), 0, "No products found")

    def test_title_extraction(self):
        first_product = self.soup.find("div", class_="productContainer")
        title = first_product.find("div", class_="name").text if first_product.find("div", class_="name") else None
        self.assertIsNotNone(title, "Title not extracted")

if __name__ == "__main__":
    unittest.main()

Menjelajahi Teknik Tingkat Lanjut dalam Web Scraping

Saat menangani situs web kompleks untuk web scraping, salah satu aspek penting yang perlu dipertimbangkan adalah menangani konten dinamis. Banyak situs web modern mengandalkan JavaScript untuk memuat elemen setelah HTML awal dikirimkan. Ini berarti alat seperti , yang hanya mengurai HTML statis, mungkin gagal menangkap semua data yang diperlukan. Dalam kasus seperti itu, mengintegrasikan alat otomatisasi browser seperti menjadi penting. Selenium dapat berinteraksi dengan situs web seperti pengguna sebenarnya, menunggu elemen dimuat dan mengekstraksi data yang sesuai. Hal ini sangat berguna ketika melakukan scraping pada situs yang merender elemen kunci secara asinkron. 🌐

Pertimbangan penting lainnya adalah struktur situs web dan API yang mendasarinya. Beberapa situs web mengekspos titik akhir API terstruktur yang digunakan untuk memuat konten secara dinamis. Dengan memeriksa aktivitas jaringan melalui alat pengembang, Anda mungkin menemukan data JSON yang lebih mudah diekstraksi daripada HTML. Misalnya, daripada menguraikan beberapa tag bertingkat untuk detail produk, Anda dapat langsung mengambil objek JSON yang berisi data bersih dan terstruktur. Metode ini lebih cepat, lebih andal, dan mengurangi permintaan server yang tidak diperlukan. Menggunakan perpustakaan seperti atau untuk interaksi API adalah pendekatan yang sangat baik untuk mengoptimalkan kinerja.

Terakhir, praktik pengikisan etis dan kepatuhan terhadap persyaratan layanan situs web tidak dapat diabaikan. Menghargai robots.txt, menghindari beban server yang berlebihan melalui pembatasan, dan menggunakan header untuk meniru pengguna sebenarnya adalah praktik dasar terbaik. Menambahkan penundaan antar permintaan, atau menggunakan perpustakaan sejenisnya atau , memastikan kelancaran pengoperasian. Ketika saya pertama kali memulai web scraping, saya mengabaikan pedoman ini, sehingga IP saya diblokir—sebuah pelajaran yang tidak akan saya lupakan! Selalu pertimbangkan faktor-faktor ini untuk memastikan pengumpulan data yang efisien dan bertanggung jawab. 🌟

  1. Apa perpustakaan terbaik untuk mengurai HTML dengan Python?
  2. adalah salah satu perpustakaan paling populer untuk parsing HTML, menawarkan metode yang mudah digunakan untuk menemukan elemen di halaman web statis.
  3. Bagaimana cara mengikis konten yang dirender oleh JavaScript?
  4. Anda dapat menggunakan alat seperti , yang dapat menyimulasikan interaksi pengguna dan menunggu elemen dimuat secara dinamis di browser.
  5. Bagaimana cara mengidentifikasi elemen HTML yang benar untuk digores?
  6. Dengan menggunakan alat pengembang browser Anda, Anda dapat memeriksa dan mengidentifikasi tag, ID, atau nama kelas yang sesuai dengan elemen yang Anda perlukan.
  7. Apakah mungkin untuk mengikis data tanpa menguraikan HTML?
  8. Ya, jika website memiliki API, Anda bisa langsung meminta data terstruktur menggunakan perpustakaan seperti atau .
  9. Bagaimana saya bisa menghindari pemblokiran saat melakukan scraping?
  10. Gunakan header seperti untuk meniru pengguna sebenarnya, menambahkan penundaan antar permintaan, dan menghormati file robots.txt situs.

Pengikisan web adalah keterampilan penting untuk mengumpulkan data secara efisien, tetapi ini memerlukan penyesuaian pendekatan Anda agar sesuai dengan struktur situs web. Dengan menggabungkan untuk penguraian HTML dan alat seperti Selenium untuk halaman dinamis, Anda dapat mengatasi banyak rintangan umum dalam ekstraksi data.

Memahami nuansa situs target, seperti rendering JavaScript atau titik akhir API, sangat penting untuk kesuksesan. Selalu ikuti praktik etis seperti membatasi permintaan agar tidak diblokir. Dengan ketekunan dan alat yang tepat, bahkan proyek scraping yang rumit pun bisa dikelola dan bermanfaat. 🚀

  1. Dokumentasi resmi untuk Sup yang Indah , perpustakaan Python yang digunakan untuk mengurai dokumen HTML dan XML.
  2. Pedoman dan praktik terbaik dari Dokumentasi Selenium , yang memberikan wawasan tentang otomatisasi tindakan browser untuk konten dinamis.
  3. Wawasan dari Noon's platform e-niaga , situs web spesifik yang ditargetkan untuk tugas pengikisan web ini.
  4. Teknik penggunaan permintaan Python dan penanganan API dari situs komunitas Piton asli .
  5. Strategi tambahan dan praktik pengikisan etis bersumber dari Menuju Ilmu Data .