Bagaimana cara melakukan web scraping pada Python dengan BeautifulSoup?

Penulis :

Bereaksi :

Komentar

Apakah Anda ingin terjun ke dunia pengikisan web tetapi tanpa terjebak dalam kode-kode yang rumit?

Dengan Python dan perpustakaan BeautifulSoupAnda dapat dengan mudah mengekstrak dan mengatur data sebuah situs web dalam beberapa baris saja.

Scraping web pada Python dengan BeautifulSoup.
Pengikisan web pada Python dengan BeautifulSoup. Cristina untuk Alucare.fr

Prasyarat untuk melakukan scraping pada Python dengan BeautifulSoup

✅ Sebelum memulai, penting untuk memiliki beberapa dasar-dasar pemrograman. Ini akan memberi Anda pemahaman yang lebih baik tentang cara kerja kode. Anda tidak perlu menjadi ahli, tetapi mengetahui cara membaca dan menjalankan skrip Python akan sangat membantu Anda.

Selanjutnya, inilah yang perlu Anda lakukan pertama kali untuk membuat mengikis pada Python dengan BeautifulSoup :

  • ✔ Instal Python serta lingkungan pengembangan.
  • ✔ Instal pip, alat yang memungkinkan Anda dengan mudah menambahkan perpustakaan Python.
  • ✔ Instal BeautifulSoup dengan perintah :
pip install beautifulsoup4
  • ✔ Instal Permintaan untuk mengambil halaman web dengan perintah :
permintaan pemasangan pip

Bagaimana cara melakukan web scraping dengan Python dan BeautifulSoup?

Ikuti tutorial kami untuk proyek scraping web sederhana.

Gambar yang menunjukkan cara kerja web scraping pada Python dengan BeautifulSoup.
Gambar yang menunjukkan cara kerja web scraping pada Python dengan BeautifulSoup. Cristina untuk Alucare.fr

Proyek : Mengambil judul halaman dan semua tautan yang terdapat di dalamnya.

Langkah 1: Mengambil konten halaman dengan Permintaan

Untuk melaksanakan Permintaan HTTP GET ke URL, gunakan perintah Permintaan.

📌 Ketika Anda mengirim permintaan HTTP dengan Request, server selalu mengembalikan kode status. Kode-kode ini menunjukkan apakah permintaan berhasil atau tidak.

200 sukses.
301 / 302 pengalihan.
404 Halaman tidak ditemukan.
500 kesalahan server internal.

Dengan PermintaanAnda dapat memeriksa hasil dari sebuah permintaan menggunakan atribut .status_code. Berikut adalah contoh kode yang mengirimkan permintaan ke bonjour.comyang memeriksa kode status dan menampilkan ekstrak konten HTML jika semuanya baik-baik saja:

permintaan impor

URL Target #
url = "https://bonjour.com"

# Mengirim permintaan GET
response = requests.get(url)

# Periksa kode status
if response.status_code == 200:
    print("Sukses: halaman telah diambil!")
    html = response.text # Konten HTML dari halaman
    print("Ekstrak konten HTML:")
    print(html[:500]) # hanya menampilkan 500 karakter pertama
else
    print(f "Kesalahan: kode status {response.status_code}")
  

Langkah 2: Analisis kode HTML dengan BeautifulSoup

Ketika Anda mengambil konten dari sebuah halaman dengan Permintaan (response.text), Anda akan mendapatkan sebuah string karakter yang berisi semua kode HTML untuk halaman tersebut. Untuk memanipulasi HTML ini dengan mudah, kita menggunakan BeautifulSoup untuk membuat objek BeautifulSoup.
📌 Ketika Anda mengoper HTML mentah ke BeautifulSoup, Anda perlu menentukan pengurai (contoh: "html.parser). Hal ini memungkinkan BeautifulSoup untuk menginterpretasikan HTML dengan benar dan menghindari peringatan.
from bs4 import BeautifulSoup
permintaan impor

url = "https://bonjour.com"
response = requests.get(url)
html = response.text

# Menentukan pengurai direkomendasikan
sup = BeautifulSoup(html, "html.parser")

Langkah 3: Menemukan dan mengekstrak elemen

Setelah Anda mengubah HTML menjadi file BeautifulSoupAnda dapat mulai mencari dan mengambil data yang Anda minati (tag HTML).

  • Gunakan find() dan find_all()
# Ambil judul <h1>
h1 = sup.find("h1")
print(h1.get_text())

# Ambil semua tautan <a>
liens = soup.find_all("a")
untuk lien dalam liens:
    print(lien.get_text(), lien.get("href"))
  • Elemen target berdasarkan atribut

Anda dapat mempersempit pencarian berdasarkan atribut seperti kelas, id atau atribut HTML lainnya.

⚠️ Komentar Di Python, kita menulis kelas_ bukannya kelas untuk menghindari konflik dengan kata yang dicadangkan kelas.

# Mengambil div dengan id tertentu
container = soup.find("div", id="main")

# Mengambil semua tautan dengan kelas tertentu
nav_links = soup.find_all("a", class_="nav-link")
  • Gunakan selektor CSS dengan select()

Untuk pencarian yang lebih tepat, gunakan select() dengan pemilih CSS.

# Semua tautan dalam judul artikel
article_links = sup.select("artikel h2 a")

# Semua <a> yang atribut href-nya dimulai dengan "http".
links_http = sup.select('a[href^="http"]]')

Itu Pemilih CSS sangat kuat jika Anda ingin menargetkan bagian tertentu dari sebuah halaman tanpa harus menelusuri seluruh kode HTML secara manual.

Bagaimana cara mengekstrak data dari tabel HTML menggunakan BeautifulSoup?

Mengekstrak data dari tabel HTML menggunakan BeautifulSoup.
Mengekstrak data dari tabel HTML dengan BeautifulSoup. ©Christina untuk Alucare.fr

Sampai saat ini, kita telah melihat cara mengambil judul, tautan, atau teks dari halaman web.

⚠ Namun, seringkali kasus penggunaan yang sebenarnya lebih kompleks: ekstraksi data terstruktur Seperti tabel atau daftar, pengelolaan paginasi, atau pemecahan masalah kesalahan umum yang terkait dengan scraping. Inilah yang akan kita bahas bersama.

Mengekstrak tabel dan daftar

Situs web sering kali menyajikan data mereka dalam Tabel HTML (<table>, <tr>, <th>, <td>) atau daftar (

    /
      ,
    1. ). Untuk mengubah struktur ini menjadi data yang dapat digunakan, Anda perlu mempelajari bagaimana cara mengerjakannya baris demi baris atau elemen demi elemen.

      Kapan pun Anda mau mengekstrak tabel HTMLPrinsipnya sederhana saja:

      • ✅ Memulihkan header (<th>) untuk mengidentifikasi judul kolom.
      • ✅ Jelajahi setiap baris (<tr>) dan mencari sel (<td>) yang berisi data yang sebenarnya.
      • Menyimpan informasi dalam daftar atau kamus.

      Untuk Daftar HTML (

        atau
          dengan
        1. ) :

          • ✅ Temukan semua tag
          • dengan find_all.
          • ✅ Mengambil konten (teks atau tautan) dan menambahkannya ke daftar Python.

          Kesimpulan :

          Tag <table>, <tr>, <th>, <td> digunakan untuk merekonstruksi tabel.
          Tag

            /
              ,
            1. digunakan untuk mengubah daftar HTML menjadi daftar Python.

              Berikut ini contoh dengan sebuah tabel:

              html = """
              <table>
                <tr>
                  <th>nama keluarga</th>
                  <th>Usia</th>
                  <th>Kota</th>
                </tr>
                <tr>
                  <td>Alice</td>
                  <td>25</td>
                  <td>Paris</td>
                </tr>
                <tr>
                  <td>Bob.</td>
                  <td>30</td>
                  <td>Lyon</td>
                </tr>
              </table>
              """
              
              # Membuat objek BeautifulSoup
              sup = BeautifulSoup(html, "html.parser")
              
              # Ekstrak header dari larik
              headers = [th.get_text(strip = True) for th in soup.find_all("th")]
              print("Header:", headers)
              
              # Ekstrak baris-baris data (lewati baris pertama karena ini adalah header)
              rows = []
              for tr in sup.find_all("tr")[1:]:
                  cells = [td.get_text(strip = True) for td in tr.find_all("td")]
                  if cells:
                      rows.append(cells)
              
              print("Baris :", rows)
              

              Ini, find_all("th") mengambil header dan find_all("td") mengambil sel di setiap baris. Kami mengulang di atas bagian <tr> untuk membangun kembali tabel baris demi baris.

              Berikut ini contoh berdasarkan daftar:

              from bs4 import BeautifulSoup
              
              html_list = """
              
              • Apel
              • Pisang
              • Jeruk
              """ sup = BeautifulSoup(html_list, "html.parser") # Mengambil item dari daftar items = [li.get_text(strip = True) for li in soup.find_all("li")] print("Daftar yang diekstrak:", item) # ["Apel", "Pisang", "Jeruk"]

              Di sini, setiap

            2. ditransformasikan secara langsung ke dalam item daftar Python, memberikan hasil ["Apel", "Pisang", "Jeruk"].

              Mengelola penomoran halaman dan tautan

              Sering kali, data tidak muat dalam satu halaman. Ini tersebar di beberapa halaman menggunakan “halaman berikutnya” atau penomoran halaman bernomor (?page=1,?page=2, ...).

              📌 Dalam kedua kasus tersebut, Anda harus ikal (jelajahi dalam satu lingkaran) untuk mengambil semua halaman dan menggabungkan data.

              Contoh dengan parameter halaman :

              waktu impor
              permintaan impor
              from bs4 import BeautifulSoup
              
              # Contoh URL dengan pagination
              BASE_URL = "https://bonjour.com/articles?page={}"
              HEADERS = {"User-Agent": "Mozilla/5.0"}
              
              all_articles = []
              
              # Asumsikan ada 5 halaman untuk dijelajahi
              untuk halaman dalam rentang (1, 6):
                  url = BASE_URL.format(page)
                  r = requests.get(url, tajuk = HEADERS, batas waktu = 20)
                  if r.status_code == 200:
                      sup = BeautifulSoup(r.text, "html.parser")
                      # Ekstrak judul artikel
                      articles = [h2.get_text(strip=True) for h2 in soup.find_all("h2", class_="title")]
                      semua_artikel.extend(artikel)
                  else
                      print(f "Kesalahan pada halaman {halaman} (kode : {r.status_kode})")
                  time.sleep(1.0) Kesantunan #
              
              print("Artikel yang diambil:", semua_artikel)

              Penjelasan singkat:

              • Siapkan URL dengan tempat {} untuk memasukkan nomor halaman.
              BASE_URL = "https://bonjour.com/articles?page={}
              • Beberapa situs memblokir permintaan tanpa "identitas browser". Menambahkan User-Agent mencegah Anda dianggap sebagai bot.
              headers = {"User-Agent": "Mozilla/5.0"}
              requests.get(url, headers=headers) 
              • Ulangi dari halaman 1 hingga 5.
              untuk halaman dalam rentang (1, 6):
              • Mengambil HTML dari halaman tersebut.
              requests.get(url)
              • Batasi waktu tunggu jika situs tidak merespons.
              requests.get(url, timeout=20)
              • Parser la halaman.
              BeautifulSoup(response.text, "html.parser")
              • Mengumpulkan semua judul artikel.
              find_all("h2", class_="title")
              • Menambahkan item yang ditemukan ke daftar global.
              all_articles.extend(articles)
              • Berikan jeda di antara setiap permintaan agar tidak membebani server dan menghindari pemblokiran.
              time.sleep(1.0)
              • Setelah putaran, semua_artikel berisi semua 5 judul halaman.

              Kesalahan dan tantangan umum

              ❗ Scraping tidak selalu semudah menekan tombol dan semuanya beres. Anda mungkin akan menemui hambatan-hambatan umum seperti:

              • Kesalahan HTTP

              404 halaman tidak ditemukan
              403 tidak ada akses
              500 kesalahan sisi server

              Contoh :

              response = requests.get(url)
              if response.status_code == 200:
                  Halaman # OK
                  print("Halaman berhasil diambil")
              elif response.status_code == 404:
                  print("Kesalahan: halaman tidak ditemukan")
              else
                  print("Kode yang dikembalikan:", response.status_code)
              
              • Situs yang memblokir pengikisan

              Beberapa sistem mendeteksi permintaan otomatis dan memblokir akses.

              • Halaman dinamis (JavaScript)

              BeautifulSoup hanya membaca HTML statis. Jika halaman yang dimuat adalah halaman konten dengan JavaScriptAnda tidak akan melihat apa-apa.

              ✅ Dalam hal ini, gunakan alat bantu seperti Selenium Di mana Penulis naskah.

              Namun, jika Anda ingin mengikis secara efisien tanpa diblokir atau merusak situs, berikut ini adalah praktik-praktik terbaiknya:

              • ✔ Hormati file robots.txt dari sebuah situs web.
              • ✔ Siapkan tenggat waktu di antara permintaan agar tidak membebani server (menggunakan time.sleep()).
              • ✔ Gunakan proxy dan memutarnya.
              • ✔ Secara teratur mengubah Agen-Pengguna.

              Bagaimana cara menghapus web dengan Selenium dan BeautifulSoup?

              Pengikisan web dengan Selenium dan BeautifulSoup di Chrome.
              Pengikisan web dengan Selenium dan BeautifulSoup di Chrome. Cristina untuk Alucare.fr

              Pengingat BeautifulSoup adalah parser HTML yang sangat baik, tetapi tidak dapat menjalankan JavaScript dari halaman web. Di sinilah Selenium menjadi sekutu Anda!

              Pada dasarnya, Selenium mengontrol browser yang sebenarnyaAplikasi ini mengeksekusi JavaScript dan menampilkan halaman seolah-olah manusia sedang menjelajah. BeautifulSoup kemudian akan mem-parsing kode HTML setelah halaman sepenuhnya dirender. Jadi, Anda dapat mengekstrak apa yang Anda inginkan.

              Langkah 1: Instal Selenium dan BeautifulSoup

              Di sini, alih-alih menggunakan perpustakaan Request, kita akan menggunakan SeleniumUntuk menginstalnya, Anda harus melalui pip.

              pip install selenium beautifulsoup4 

              Selanjutnya, Anda perlu mengunduh dan menginstal aplikasi WebDriver yang sesuai dengan versi browser Anda (misalnya ChromeDrive untuk Google Chrome).

              ✅ Anda dapat menempatkannya di folder yang sama dengan skrip Python Anda, atauTambahkan ke variabel lingkungan PATH dari sistem Anda.

              Langkah 2: Mengkonfigurasi Selenium

              Pertama dan terutama, Anda perlu mengimpor webdriver dari Selenium untuk mengontrol browser.

              from selenium import webdriver
              from selenium.webdriver.common.by import By 

              Kemudian kita membuka browser. Browser inilah yang akan membuka halaman web dan akan mengeksekusi JavaScript (Contoh: Chrome).

              driver = webdriver.Chrome() 

              Anda memberi tahu browser halaman mana yang akan dikunjungi.

              driver.get("https://www.exemple.com") 

              Jika halaman membutuhkan waktu lama untuk menampilkan beberapa elemen, Anda dapat meminta Selenium untuk menunggu sebentar.

              driver.secara_implisit_menunggu(10) 

              Langkah 3: Mengambil konten halaman

              Setelah halaman dimuat, Anda dapat mengambil DOM penuh (Kode sumber HTML setelah eksekusi JS).

              html_content = driver.page_source 

              Langkah 4: Analisis HTML dengan BeautifulSoup

              Sekarang, masukkan kode sumber ini ke BeautifulSoup agar dapat menggunakannya:

              from bs4 import BeautifulSoup # Membuat objek BeautifulSoup soup = BeautifulSoup(html_content, 'html.parser') # Contoh: mengambil semua judul di halaman titles = soup.find_all('h2') for title in titles: print(title.get_text()) 

              👉 BeautifulSoup menawarkan metode yang kuat seperti find(), find_all(), dan selektor CSS untuk target dan ekstrak elemen Kode HTML.

              Langkah 5: Menutup browser

              Sangat penting: Selalu tutup browser Anda setelah digunakan untuk membebaskan sumber daya!

              driver.quit() 

              ✅ Dan itu dia! Anda sekarang dapat menggabungkan kekuatan Selenium untuk mensimulasikan navigasi manusia (klik, gulir, dll.) dengan efisiensi BeautifulSoup untuk menganalisis kode HTML.

              FAQ

              Apa alat terbaik untuk web scraping di Python?

              Tidak ada alat universal yang benar-benar terbaik, melainkan solusi yang disesuaikan dengan proyek Anda.

              🔥 BeautifulSoup Pengurai HTML: sederhana dan efektif untuk menganalisis HTML dan mengekstrak konten dengan cepat. Sangat ideal jika Anda baru memulai atau jika Anda memiliki proyek kecil.

              🔥 Scrapy Ini adalah kerangka kerja lengkap yang dirancang untuk mengelola volume data besar dengan fitur-fitur canggih.

              🔥 Penulis naskah : sempurna untuk situs web kompleks yang dihasilkan oleh JavaScript, karena ia mensimulasikan browser sungguhan dan memungkinkan interaksi dengan halaman seperti manusia.

              Cara menggunakan BeautifulSoup untuk mengekstrak konten dari tag <div> ?

              Dengan BeautifulSoup, Anda dapat menargetkan suar tertentu menggunakan Pemilih CSS. Untuk mengekstrak konten dari <div>Berikut ini adalah langkah-langkahnya:

              1. Ambil halaman dengan Permintaan, lalu analisis dengan BeautifulSoup
              from bs4 import BeautifulSoup
              permintaan impor
              
              url = "URL_OF YOUR_SITE" # Ganti dengan URL yang sebenarnya
              response = requests.get(url)
              html_content = response.text
              
              sup = BeautifulSoup(html_content, "html.parser")
              1. Gunakan tombol select() dengan melewatkan selektor CSS Anda untuk menargetkan <div>

              Untuk mengambil item pertama, gunakan sup.select_one
              Untuk mengambil semua item, gunakan sup.pilih

              Contoh HTML:

              <div class="article">
                <h2>Judul artikel</h2>
                <p>Inilah yang dikatakan paragraf tersebut.</p>
              </div>

              Contoh dengan CSS :

              # Mengambil div pertama dengan kelas "artikel"
              div_artikel = sup.select_one("div.article")
              
              # Tampilkan konten teksnya
              if div_artikel:
              print(div_article.get_text(strip=True))

              Di sini, pemilih CSS adalah div.article.

              1. Mengekstrak elemen di dalam <div>
              # Mengambil judul di dalam div
              judul = sup.select_one("div.article h2").get_text()
              
              # Mengambil paragraf dari dalam div
              paragraf = sup.select_one("div.item p").get_text()
              
              print("Judul:", judul)
              print("Paragraf:", paragraf)

              Bagaimana Requests dan BeautifulSoup dapat digunakan bersama?

              Kedua perpustakaan ini saling melengkapi satu sama lain.

              1. Requests mengambil konten dari halaman web menggunakan permintaan HTTP.

              Ia mengirimkan permintaan HTTP ke situs target dan mengunduh kode HTML mentah dari halaman tersebut.

              permintaan impor
              
              url = "https://sitecible.com"
              response = requests.get(url) Permintaan HTTP #
              print(response.text) # menampilkan HTML mentah

              Pada tahap ini, yang Anda miliki hanyalah teks besar yang penuh dengan tag (<html>,<div><p>dll.).

              1. BeautifulSoup menganalisis konten HTML ini untuk mengekstrak apa yang menarik bagi Anda.

              Dia mengambil HTML mentah dan mengubahnya menjadi struktur yang terorganisir. Dengan demikian, Anda dapat dengan mudah menavigasi di dalam HTML: melakukan pencarian, mengekstrak, dan mengambil data.

              from bs4 import BeautifulSoup
              
              soup = BeautifulSoup(response.text, "html.parser") # mem-parsing HTML
              title = soup.find("h1").get_text() # mengekstrak konten dari <h1>
              cetak (judul)

              Mengapa kode scraping web saya tidak berfungsi di beberapa situs?

              Skrip Anda mungkin tidak mengambil apa pun, karena beberapa situs tidak menyediakan semua konten secara langsung dalam HTML.

              Situs-situs ini menggunakan JavaScript untuk memuat data secara dinamis. Namun, BeautifulSoup tidak memungkinkan untukmenganalisis data yang dirender oleh JavaScript.

              Dalam hal ini, Anda harus beralih ke alat bantu seperti Penulis naskah Di mana Selenium.

              Peran apa yang dimainkan BeautifulSoup dalam web scraping?

              BeautifulSoup berperan sebagaiPengurai HTML.

              Ia mengambil kode sumber halaman dalam bentuk teks biasa dan mengubahnya menjadi objek terstruktur yang dapat Anda telusuri dengan mudah.

              Tanpa pustaka ini, Anda akan melihat sebuah blok besar teks yang tidak dapat dibaca. Sederhananya, BeautifulSoup adalah penerjemah antara HTML biasa dan Anda Kode Python.

              Pengikisan web: BeautifulSoup vs Scrapy?

              BeautifulSoup dan Scrapy sangat berbeda, meskipun keduanya digunakan untuk web scraping.

              BeautifulSoup Scrapy
              Pustaka sederhana yang hanya digunakan untuk mengurai HTML dan mengekstrak data. Kerangka kerja lengkap yang mengelola seluruh proses pengikisan
              (kueri, pelacakan tautan, pagination, ekspor data, manajemen kesalahan).

              Untuk ringkasan, BeautifulSoup memudahkanEkstraksi data HTML dalam Python. Perpustakaan ini sempurna untuk pemula, karena membuat penggosokan menjadi cepat dan mudah.

              Sebaliknya, jika Anda tidak ingin tidak ada pengkodean, alat yang lengkap Data Cerah juga merupakan solusi yang sangat baik untuk web scraping.

              👉 Sekarang, beri tahu kami di kolom komentar, apa yang berhasil Anda kikis!

Suka? Bagikan!

Konten ini aslinya adalah di Perancis (Lihat editor tepat di bawah). Buku ini telah diterjemahkan dan dikoreksi dalam berbagai bahasa menggunakan Deepl dan/atau Google Translate API untuk menawarkan bantuan di sebanyak mungkin negara. Penerjemahan ini menghabiskan biaya beberapa ribu euro per bulan. Jika terjemahan ini tidak 100 % sempurna, tinggalkan komentar agar kami dapat memperbaikinya. Jika Anda tertarik untuk mengoreksi dan meningkatkan kualitas artikel yang diterjemahkan, silakan kirim email kepada kami menggunakan formulir kontak!
Kami menghargai umpan balik Anda untuk meningkatkan konten kami. Jika Anda ingin memberikan saran perbaikan, silakan gunakan formulir kontak kami atau tinggalkan komentar di bawah ini. Komentar Anda selalu membantu kami meningkatkan kualitas situs web kami Alucare.fr


Alucare adalah media independen. Dukung kami dengan menambahkan kami ke favorit Google News Anda:

Kirimkan komentar di forum diskusi