Bagaimana cara melakukan web scraping pada Python dengan BeautifulSoup?

Penulis :

Bereaksi :

Komentar

Untuk membuat pengikisan web dalam Python dengan BeautifulSoup, kamu memerlukan dua pustaka: requests untuk mengunduh halaman web tersebut, dan beautifulsoup4 untuk mengekstrak data dari kode HTML.

Pasanglah dengan perintah pip install requests beautifulsoup4, lalu ikuti panduan di bawah ini untuk melakukan scraping pada sebuah situs secara bertahap.

Skrip Python untuk web scraping menggunakan BeautifulSoup guna mengekstrak data dari sebuah halaman web
Pengikisan web pada Python dengan BeautifulSoup. Cristina untuk Alucare.fr

Prasyarat untuk melakukan scraping pada Python dengan BeautifulSoup

Sebelum memulainya, kamu tidak perlu menjadi ahli. Cukup bisa membaca dan menjalankan skrip Python sudah lebih dari cukup untuk memulai.

Berikut ini yang perlu diinstal untuk memulai:

  • Memasang Python serta lingkungan pengembangan.
  • Memasang pip, alat yang memungkinkan Anda menambahkan pustaka Python hanya dengan satu perintah.
  • Memasang BeautifulSoup :
pip install beautifulsoup4

Perhatikan nama paketnya: di PyPI, itu benar beautifulsoup4 yang harus ditulis. Modul yang akan kamu impor ke dalam kode kamu bernama bs4.

  • Memasang Requests untuk mengunduh halaman web:
permintaan pemasangan pip
  • Memasang lxml (opsional), parser yang lebih cepat yang digunakan BeautifulSoup untuk menganalisis HTML:
pip install lxml

Bagaimana cara melakukan web scraping dengan Python dan BeautifulSoup?

Berikut ini adalah panduan lengkap untuk memulihkan judul dari sebuah halaman web dan semua tautan yang terkandung di dalamnya.

Skrip Python untuk web scraping menggunakan pustaka BeautifulSoup guna mengekstrak data HTML
Web scraping dalam Python dengan BeautifulSoup. ©Christina untuk Alucare.fr

Langkah 1: Mengambil konten halaman dengan Permintaan

Untuk mengunduh sebuah halaman web, kamu mengirimkan sebuah Permintaan HTTP GET ke sebuah URL. Itulah fungsi dari pustaka tersebut Requests.

Setiap kali ada permintaan, server akan mengirimkan sebuah kode status yang menunjukkan apakah semuanya berjalan lancar. Hal-hal utama yang perlu diketahui:

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

Dengan Requests, kamu memeriksa hasil ini menggunakan atribut .status_code. Berikut ini contoh konkretnya: kode ini mengirimkan permintaan ke sebuah situs, memeriksa kode status, lalu menampilkan cuplikan konten HTML jika semuanya berjalan lancar.

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

Saat kamu mengambil konten dari sebuah halaman dengan response.text, kamu akan mendapatkan sebuah string karakter sederhana: seluruh kode HTML dari halaman tersebut, tetapi belum dapat dimanfaatkan dalam kondisi saat ini. Untuk mengelolanya dengan mudah, buatlah sebuah objek BeautifulSoup, yang mengubah HTML mentah ini menjadi struktur yang dapat kamu telusuri dan analisis.

Selalu menunjukkan sebuah pengurai, misalnya "html.parser. BeautifulSoup kemudian akan menafsirkan HTML tersebut dengan benar, tanpa menampilkan peringatan apa pun. Kamu juga bisa menggunakan lxml, yang lebih cepat, dan harus dipasang secara terpisah.

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

HTML tersebut kini telah menjadi objek BeautifulSoup. Kamu dapat mencari dan mengambil data yang menarik minatmu, satu per satu. Tiga metode ini mencakup sebagian besar kebutuhan.

Menggunakan find() dan find_all()

find() mengembalikan unsur pertama ditemukan. find_all() mengembalikan daftar lengkap elemen-elemen yang sesuai.

# 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

Kamu dapat mempersempit pencarian berdasarkan atribut HTML, seperti kelas, id atau yang lainnya. Harap dicatat: Dalam Python, kita menulis kelas_ dan tidak kelas, untuk menghindari konflik dengan kata yang telah ditetapkan dalam bahasa tersebut.

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

# Mengambil semua tautan dengan kelas tertentu
tautan_nav = soup.find_all("a", class_="nav-link")

Menggunakan selektor CSS dengan select()

Untuk pencarian yang lebih akurat, metode select() menerima Pemilih CSS. Kamu dapat menargetkan bagian-bagian tertentu dari sebuah halaman secara tepat, tanpa perlu menelusuri seluruh kode HTML secara manual.

# 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"]]')

Bagaimana cara mengekstrak data dari tabel HTML menggunakan BeautifulSoup?

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

Kasus penggunaan yang sebenarnya seringkali lebih rumit daripada sekadar mengambil judul atau tautan. Kamu harus mengelola...’ekstraksi data terstruktur seperti tabel dan daftar, pembagian halaman, serta kesalahan-kesalahan umum dalam proses scraping.

Mengekstrak tabel dan daftar

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

    /
      dengan
    1. ). Untuk mengubah struktur-struktur ini menjadi data yang dapat diolah, kamu harus menelusurinya baris demi baris atau elemen demi elemen.

      Untuk mengekstrak sebuah tabel HTMLPrinsipnya sederhana saja:

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

      Untuk Daftar HTML (

        Di mana
          ) :

          • Tandai semua tag
          • dengan find_all.
          • Mengambil isinya (teks atau tautan) dan menambahkannya ke dalam 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 judul dan find_all("td") mengambil sel-sel dari setiap baris. Kamu mengulangi proses ini pada <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"]

          Masing-masing

        1. langsung diubah menjadi elemen daftar Python, sehingga menghasilkan hasil ["Apel", "Pisang", "Jeruk"].

          Mengelola penomoran halaman dan tautan

          Seringkali, data tidak muat dalam satu halaman saja. Data tersebut disebar melalui tautan-tautan “halaman berikutnya” atau penomoran halaman bernomor (?halaman=1, ?halaman=2, dll.). Dalam kedua kasus tersebut, kamu harus ikal untuk mengambil semua halaman dan menggabungkan datanya.

          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 langkah demi langkah:

          • Siapkan’URL dengan satu tempat {} untuk memasukkan nomor halaman.
          BASE_URL = "https://bonjour.com/articles?page={}
          • Beberapa situs memblokir permintaan yang tidak menyertakan informasi identitas peramban. Tambahkan sebuah User-Agent hindari agar tidak dianggap sebagai bot.
          headers = {"User-Agent": "Mozilla/5.0"}
          requests.get(url, headers=headers) 
          • Tautan kembali ke halaman 1 hingga 5.
          untuk halaman dalam rentang (1, 6):
          • Ambil kode HTML dari halaman tersebut dengan requests.
          requests.get(url)
          • Membatasi waktu tunggu jika situs tidak merespons (batas waktu 20 detik).
          requests.get(url, timeout=20)
          • Analisis halaman ini dengan BeautifulSoup.
          BeautifulSoup(response.text, "html.parser")
          • Mengambil semua judul artikel.
          find_all("h2", class_="title")
          • Tambahkan artikel yang ditemukan ke dalam daftar keseluruhan.
          all_articles.extend(articles)
          • Masukkan sebuah istirahat di antara setiap permintaan agar server tidak kelebihan beban dan untuk menghindari pemblokiran.
          time.sleep(1.0)

          Setelah putaran, semua_artikel berisi semua 5 judul halaman.

          Kesalahan dan tantangan umum

          Scraping bukan sekadar menekan tombol. Kamu akan sering menemui kendala:

          • Kesalahan HTTP : 404 (halaman tidak ditemukan), 403 (dilarang masuk) dan 500 (kesalahan di sisi server).

          Contoh pengelolaan:

          response = requests.get(url)
          if response.status_code == 200:
              print("Halaman berhasil diambil")
          elif response.status_code == 404:
              print("Kesalahan: halaman tidak ditemukan")
          else:
              print("Kode status yang dikembalikan:", response.status_code)
          
          • Situs yang memblokir pengikisan : ada yang mendeteksi permintaan otomatis dan memblokir akses.
          • Halaman dinamis (JavaScript) : BeautifulSoup hanya membaca HTML statis. Jika halaman tersebut memuat isinya menggunakan JavaScript, kamu tidak akan melihat apa pun. Dalam hal ini, kamu harus menggunakan alat seperti Selenium Di mana Playwright.

          Untuk melakukan scraping secara efektif tanpa diblokir atau merusak situs, berikut ini adalah praktik terbaiknya:

          • Patuhi file robots.txt dari situs yang ingin kamu analisis.
          • Terapkan tenggat waktu antara permintaan dengan time.sleep() agar server tidak kelebihan beban.
          • Gunakan proxy dan putar-putar.
          • Gantilah secara teratur User-Agent.

          Bagaimana cara menghapus web dengan Selenium dan BeautifulSoup?

          Melakukan web scraping dengan Selenium dan BeautifulSoup di Chrome menggunakan Python.
          Pengikisan web dengan Selenium dan BeautifulSoup di Chrome. Cristina untuk Alucare.fr

          Selenium mengontrol browser yang sebenarnya, menjalankan kode JavaScript dan menampilkan halaman tersebut seolah-olah sedang dijelajahi oleh manusia. BeautifulSoup Kemudian, analisis HTML setelah halaman ditampilkan sepenuhnya, lalu ekstrak semua data yang kamu inginkan.

          Langkah 1: Instal Selenium dan BeautifulSoup

          Di sini, alih-alih requests, kamu menggunakan Selenium untuk mengambil konten halaman tersebut. Instal kedua pustaka tersebut dengan perintah berikut:

          pip install selenium beautifulsoup4

          Selanjutnya, kamu harus mengunduh sebuah WebDriver disesuaikan dengan versi browser-mu. Untuk Google Chrome, ini adalah ChromeDriver. Kamu punya dua pilihan: menyimpannya di folder yang sama dengan skrip Python-mu, atau’Tambahkan ke variabel lingkungan PATH dari sistemmu.

          Langkah 2: Mengkonfigurasi Selenium

          Mulailah dengan mengimpor webdriver menggunakan Selenium untuk mengendalikan peramban.

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

          Selanjutnya, buka peramban. Peramban itulah yang akan membuka halaman tersebut dan menjalankan JavaScript, di sini Chrome.

          driver = webdriver.Chrome()

          Memberitahu peramban mana URL mengunjungi.

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

          Jika halaman membutuhkan waktu lama untuk menampilkan beberapa elemen, kamu dapat meminta Selenium untuk menunggu hingga 10 detik.

          driver.secara_implisit_menunggu(10)

          Langkah 3: Mengambil konten halaman

          Setelah halaman dimuat, ambil DOM penuh : kode sumber HTML yang dihasilkan setelah JavaScript dijalankan.

          html_content = driver.page_source

          Langkah 4: Analisis HTML dengan BeautifulSoup

          Sekarang, kirimkan kode sumber ini ke BeautifulSoup untuk memanfaatkannya:

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

          BeautifulSoup menyediakan metode-metode yang sangat berguna seperti find(), find_all() dan selektor CSS untuk menargetkan dan mengekstrak elemen-elemen tertentu dalam HTML.

          Langkah 5: Menutup browser

          Sangat penting: selalu tutup browser-mu setelah menjalankan program untuk membebaskan sumber daya.

          driver.quit()

          Dengan demikian, kamu menggabungkan kekuatan dari Selenium untuk mensimulasikan navigasi manusia (klik, pengguliran) dengan keefektifan BeautifulSoup dalam menganalisis HTML. Ini adalah metode yang ideal untuk melakukan scraping pada situs yang memuat datanya melalui JavaScript.

          FAQ

          Apa alat terbaik untuk web scraping di Python?

          Tidak ada’alat pengikis yang bersifat universal, melainkan solusi yang disesuaikan dengan proyekmu. Berikut ini tiga yang paling sering digunakan:

          • BeautifulSoup : sederhana dan efektif untuk menganalisis HTML dan mengekstrak konten dengan cepat. Cocok sekali jika kamu baru memulai atau memiliki proyek-proyek kecil.
          • Scrapy : sebuah kerangka kerja yang lengkap, dirancang untuk mengelola volume data yang besar dengan fitur-fitur canggih.
          • Playwright : sangat cocok untuk situs web kompleks yang dihasilkan oleh JavaScript. Alat ini mensimulasikan peramban sungguhan dan berinteraksi dengan halaman layaknya manusia.

          Bagaimana cara menggunakan BeautifulSoup untuk mengekstrak konten dari tag div?

          Dengan BeautifulSoup, kamu menargetkan sebuah tag tertentu dengan menggunakan sebuah Pemilih CSS. Untuk mengekstrak isi sebuah tag <div>, ikuti langkah-langkah berikut ini.

          1. Mengunduh halaman web dengan requests, lalu menganalisis HTML dengan BeautifulSoup.

          from bs4 import BeautifulSoup
          import requests
          
          url = "URL_DE_TON_SITE"  # Remplace par l'URL réelle
          reponse = requests.get(url)
          html_content = reponse.text
          
          soup = BeautifulSoup(html_content, "html.parser")

          2. Menggunakan metode tersebut select() dengan selektor CSS-mu untuk menargetkan tag tersebut <div>.

          Untuk mengambil elemen pertama, gunakan sup.select_one. Untuk mengambil semua elemen, gunakan sup.pilih. Berikut ini adalah contoh kode HTML:

          <div>
            <h2>Titre de l'article</h2>
            <p>Voici le contenu du paragraphe.</p>
          </div>

          Dan berikut ini contohnya dengan selektor CSS div.article :

          # Récupérer le premier div avec la classe "article"
          div_article = soup.select_one("div.article")
          
          # Afficher son contenu texte
          if div_article:
              print(div_article.get_text(strip=True))

          3. Keluarkan benda-benda yang ada di dalam <div>.

          # Récupérer le titre à l'intérieur du div
          titre = soup.select_one("div.article h2").get_text()
          
          # Récupérer le paragraphe à l'intérieur du div
          paragraphe = soup.select_one("div.article p").get_text()
          
          print("Titre :", titre)
          print("Paragraphe :", paragraphe)

          Bagaimana Requests dan BeautifulSoup dapat digunakan bersama?

          Kedua perpustakaan tersebut adalah tambahan : yang satu mengunduh halaman tersebut, yang lain menganalisisnya.

          1. requests mengirimkan permintaan HTTP dan mengunduh kode HTML mentah dari halaman tersebut.

          import requests
          
          url = "https://sitecible.com"
          response = requests.get(url)  # requête HTTP
          print(response.text)  # affiche le HTML brut

          Pada tahap ini, kamu hanya memiliki teks yang sangat panjang dan penuh dengan tag (<html>, <div>, <p>dll.).

          2. BeautifulSoup menganalisis HTML mentah ini dan mengubahnya menjadi sebuah struktur yang terorganisir. Kemudian, kamu bisa menjelajahi halaman tersebut, menemukan tag-tagnya, dan mengambil datanya.

          from bs4 import BeautifulSoup
          
          soup = BeautifulSoup(response.text, "html.parser")  # analyse le HTML
          titre = soup.find("h1").get_text()  # extrait le contenu d'un <h1>
          print(titre)

          Mengapa kode scraping web saya tidak berfungsi di beberapa situs?

          Terkadang skripmu tidak berhasil mengambil apa pun. Beberapa situs tidak menyajikan seluruh kontennya secara langsung dalam format HTML: mereka menggunakan JavaScript untuk memuat data secara dinamis. Namun, BeautifulSoup tidak dapat menganalisis data yang dihasilkan oleh JavaScript. Dalam hal ini, kamu perlu memanfaatkan alat-alat seperti Playwright Di mana Selenium.

          Peran apa yang dimainkan BeautifulSoup dalam web scraping?

          BeautifulSoup berperan sebagai’Pengurai HTML. Ia mengubah kode suatu halaman menjadi objek terstruktur yang dapat kamu telusuri dengan mudah. Singkatnya, ini adalah pengonversi antara HTML mentah dan kode Python-mu.

          Web scraping: BeautifulSoup atau Scrapy?

          BeautifulSoup dan Scrapy sungguh berbeda, meskipun keduanya digunakan untuk pengikisan web.

          BeautifulSoup Scrapy
          Pustaka sederhana yang hanya digunakan untuk mengurai HTML dan mengekstrak data. Sebuah kerangka kerja lengkap yang mengelola seluruh proses scraping: permintaan, pelacakan tautan, paginasi, ekspor data, dan penanganan kesalahan.

          BeautifulSoup adalah pilihan yang tepat untuk pemula: ini membuat’Ekstraksi data HTML dalam Python sederhana dan cepat.

          Jika kamu lebih suka meminimalkan bagian kode sebanyak mungkin, alat ini Data Cerah menyediakan kumpulan data yang siap pakai untuk meminimalkan bagian pemrograman.

          👍Pendapat Anda
          Artikel ini informatif
          Artikel ini objektif
          Artikel ini menjawab pertanyaan saya
          Kontennya selalu diperbarui
          🔍 Menemukan kesalahan? Beritahu kami di mana!

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