Scraping Web Menggunakan Python: Panduan Langkah-demi-Langkah

Pengikisan web adalah ide untuk mengekstraksi informasi dari situs web dan menggunakannya untuk kasus penggunaan tertentu.

Katakanlah Anda mencoba mengekstrak tabel dari halaman web, mengonversinya menjadi file JSON, dan menggunakan file JSON untuk membuat beberapa alat internal. Dengan bantuan pengikisan web, Anda dapat mengekstrak data yang Anda inginkan dengan menargetkan elemen tertentu di halaman web. Pengikisan web menggunakan Python adalah pilihan yang sangat populer karena Python menyediakan banyak pustaka seperti BeautifulSoup, atau Scrapy untuk mengekstrak data secara efektif.

Memiliki keterampilan mengekstraksi data secara efisien juga sangat penting sebagai pengembang atau ilmuwan data. Artikel ini akan membantu Anda memahami cara mengikis situs web secara efektif dan mendapatkan konten yang diperlukan untuk memanipulasinya sesuai kebutuhan Anda. Untuk tutorial ini, kita akan menggunakan paket BeautifulSoup. Ini adalah paket trendi untuk mengorek data dengan Python.

Mengapa menggunakan Python untuk Pengikisan Web?

Python adalah pilihan pertama bagi banyak pengembang saat membuat web scraper. Ada banyak alasan mengapa Python menjadi pilihan pertama, tetapi untuk artikel ini, mari kita bahas tiga alasan utama mengapa Python digunakan untuk data scraping.

Dukungan Perpustakaan dan Komunitas: Ada beberapa perpustakaan hebat, seperti BeautifulSoup, Scrapy, Selenium, dll., yang menyediakan fungsi hebat untuk menggores halaman web secara efektif. Itu telah membangun ekosistem yang sangat baik untuk pengikisan web, dan juga karena banyak pengembang di seluruh dunia telah menggunakan Python, Anda dapat dengan cepat mendapatkan bantuan saat mengalami kebuntuan.

Otomasi: Python terkenal dengan kemampuan otomatisasinya. Diperlukan lebih dari pengikisan web jika Anda mencoba membuat alat kompleks yang mengandalkan pengikisan. Misalnya, jika Anda ingin membuat alat yang melacak harga barang di toko online, Anda perlu menambahkan beberapa kemampuan otomatisasi agar dapat melacak harga setiap hari dan menambahkannya ke database Anda. Python memberi Anda kemampuan untuk mengotomatiskan proses tersebut dengan mudah.

Visualisasi Data: Pengikisan web banyak digunakan oleh ilmuwan data. Ilmuwan data sering kali perlu mengekstrak data dari halaman web. Dengan perpustakaan seperti Panda, Python membuat visualisasi data lebih sederhana dari data mentah.

Pustaka untuk Pengikisan Web dengan Python

Ada beberapa pustaka yang tersedia di Python untuk mempermudah pengikisan web. Mari kita bahas tiga perpustakaan paling populer di sini.

  Bagaimana Anda Bisa Masuk ke Depop

#1. Sup Cantik

Salah satu perpustakaan paling populer untuk pengikisan web. BeautifulSoup telah membantu pengembang mengikis halaman web sejak 2004. Ini menyediakan metode sederhana untuk menavigasi, mencari, dan memodifikasi struktur parse. Beautifulsoup sendiri juga melakukan pengkodean untuk data yang masuk dan keluar. Itu terpelihara dengan baik dan memiliki komunitas yang hebat.

#2. Scrapy

Kerangka kerja populer lainnya untuk ekstraksi data. Scrapy memiliki lebih dari 43000 bintang di GitHub. Itu juga dapat digunakan untuk mengikis data dari API. Ini juga memiliki beberapa dukungan bawaan yang menarik, seperti mengirim email.

#3. Selenium

Selenium pada dasarnya bukan perpustakaan scraping web. Sebaliknya, itu adalah paket otomatisasi browser. Tetapi kami dapat dengan mudah memperluas fungsinya untuk menggores halaman web. Itu menggunakan protokol WebDriver untuk mengendalikan browser yang berbeda. Selenium telah berada di pasar selama hampir 20 tahun sekarang. Tetapi menggunakan Selenium, Anda dapat dengan mudah mengotomatiskan dan mengikis data dari halaman web.

Tantangan dengan Pengikisan Web Python

Seseorang dapat menghadapi banyak tantangan saat mencoba mengorek data dari situs web. Ada masalah seperti jaringan lambat, alat anti-scraping, pemblokiran berbasis IP, pemblokiran captcha, dll. Masalah ini dapat menyebabkan masalah besar saat mencoba mengikis situs web.

Tetapi Anda dapat melewati tantangan secara efektif dengan mengikuti beberapa cara. Misalnya, dalam banyak kasus, alamat IP diblokir oleh situs web ketika ada lebih dari jumlah permintaan yang dikirim dalam interval waktu tertentu. Untuk menghindari pemblokiran IP, Anda harus mengkode scraper Anda agar menjadi dingin setelah mengirimkan permintaan.

Pengembang juga cenderung memasang perangkap honeypot untuk pencakar. Perangkap ini biasanya tidak terlihat oleh mata telanjang manusia tetapi dapat dijelajahi oleh pengikis. Jika Anda menggores situs web yang memasang perangkap honeypot, Anda harus membuat kode pengikis yang sesuai.

Captcha adalah masalah parah lainnya dengan pencakar. Sebagian besar situs web saat ini menggunakan captcha untuk melindungi akses bot ke halaman mereka. Dalam kasus seperti itu, Anda mungkin perlu menggunakan pemecah captcha.

Menggores Situs Web dengan Python

Seperti yang telah kita diskusikan, kita akan menggunakan BeautifulSoup untuk membuang situs web. Dalam tutorial ini, kami akan mengikis data historis Ethereum dari Coingecko dan menyimpan data tabel sebagai file JSON. Mari beralih ke pembuatan pengikis.

Langkah pertama adalah menginstal BeautifulSoup and Requests. Untuk tutorial ini, saya akan menggunakan Pipenv. Pipenv adalah manajer lingkungan virtual untuk Python. Anda juga dapat menggunakan Venv jika mau, tetapi saya lebih suka Pipenv. Membahas Pipenv berada di luar cakupan tutorial ini. Tetapi jika Anda ingin mempelajari bagaimana Pipenv dapat digunakan, ikuti panduan ini. Atau, jika Anda ingin memahami lingkungan virtual Python, ikuti panduan ini.

  Bagaimana Anda Dapat Mengatur Ulang MyFitnessPal

Luncurkan shell Pipenv di direktori proyek Anda dengan menjalankan perintah pipenv shell. Ini akan meluncurkan subkulit di lingkungan virtual Anda. Sekarang, untuk menginstal BeautifulSoup, jalankan perintah berikut:

pipenv install beautifulsoup4

Dan, untuk menginstal permintaan, jalankan perintah yang mirip dengan yang di atas:

pipenv install requests

Setelah penginstalan selesai, impor paket yang diperlukan ke file utama. Buat file bernama main.py dan impor paket seperti di bawah ini:

from bs4 import BeautifulSoup
import requests
import json

Langkah selanjutnya adalah mendapatkan konten halaman data historis dan mengurainya menggunakan parser HTML yang tersedia di BeautifulSoup.

r = requests.get('https://www.coingecko.com/en/coins/ethereum/historical_data#panel')

soup = BeautifulSoup(r.content, 'html.parser')

Pada kode di atas, halaman diakses menggunakan metode get yang tersedia di pustaka permintaan. Konten yang diurai kemudian disimpan dalam variabel yang disebut sup.

Bagian pengikisan asli dimulai sekarang. Pertama, Anda harus mengidentifikasi tabel dengan benar di DOM. Jika Anda membuka halaman ini dan memeriksanya menggunakan alat pengembang yang tersedia di browser, Anda akan melihat bahwa tabel tersebut memiliki tabel kelas ini table-striped text-sm text-lg-normal.

Tabel Data Historis Ethereum Coingecko

Untuk menargetkan tabel ini dengan benar, Anda dapat menggunakan metode find.

table = soup.find('table', attrs={'class': 'table table-striped text-sm text-lg-normal'})

table_data = table.find_all('tr')

table_headings = []

for th in table_data[0].find_all('th'):
    table_headings.append(th.text)

Pada kode di atas, pertama-tama tabel ditemukan menggunakan metode soup.find, kemudian menggunakan metode find_all, semua elemen tr di dalam tabel dicari. Elemen tr ini disimpan dalam variabel yang disebut table_data. Tabel memiliki beberapa elemen th untuk judul. Sebuah variabel baru bernama table_headings diinisialisasi untuk menyimpan judul dalam daftar.

Perulangan for kemudian dijalankan untuk baris pertama tabel. Di baris ini, semua elemen dengan th dicari, dan nilai teksnya ditambahkan ke daftar table_headings. Teks diekstraksi menggunakan metode teks. Jika Anda mencetak variabel table_headings sekarang, Anda akan dapat melihat keluaran berikut:

['Date', 'Market Cap', 'Volume', 'Open', 'Close']

Langkah selanjutnya adalah mengikis sisa elemen, membuat kamus untuk setiap baris, lalu menambahkan baris ke dalam daftar.

for tr in table_data:
    th = tr.find_all('th')
    td = tr.find_all('td')

    data = {}

    for i in range(len(td)):
        data.update({table_headings[0]: th[0].text})
        data.update({table_headings[i+1]: td[i].text.replace('n', '')})

    if data.__len__() > 0:
        table_details.append(data)

Ini adalah bagian penting dari kode. Untuk setiap tr dalam variabel table_data, pertama, elemen th dicari. Elemen ke-th adalah tanggal yang ditunjukkan pada tabel. Elemen th ini disimpan di dalam variabel th. Demikian pula, semua elemen td disimpan dalam variabel td.

  Cara Mendapatkan Asisten Google di macOS

Data kamus kosong diinisialisasi. Setelah inisialisasi, kami mengulang rentang elemen td. Untuk setiap baris, pertama-tama, kami memperbarui bidang kamus pertama dengan item pertama th. Kode table_headings[0]: th[0].text menetapkan pasangan nilai kunci tanggal dan elemen th pertama.

Setelah menginisialisasi elemen pertama, elemen lainnya ditetapkan menggunakan data.update({table_headings[i+1]: td[i].teks.ganti(‘n’, ”)}). Di sini, teks elemen td pertama kali diekstraksi menggunakan metode teks, lalu semua n diganti menggunakan metode ganti. Nilai tersebut kemudian ditetapkan ke elemen ke-i+1 dari daftar table_headings karena elemen ke-i sudah ditetapkan.

Kemudian, jika panjang kamus data melebihi nol, kami menambahkan kamus ke daftar table_details. Anda dapat mencetak daftar table_details untuk diperiksa. Tapi kami akan menulis nilai file JSON. Mari kita lihat kode untuk ini,

with open('table.json', 'w') as f:
    json.dump(table_details, f, indent=2)
    print('Data saved to json file...')

Kami menggunakan metode json.dump di sini untuk menulis nilai ke dalam file JSON bernama table.json. Setelah penulisan selesai, kami mencetak Data yang disimpan ke file json… ke dalam konsol.

Sekarang, jalankan file menggunakan perintah berikut,

python run main.py

Setelah beberapa waktu, Anda akan dapat melihat Data disimpan ke file JSON… teks di konsol. Anda juga akan melihat file baru bernama table.json di direktori file kerja. File akan terlihat mirip dengan file JSON berikut:

[
  {
    "Date": "2022-11-27",
    "Market Cap": "$145,222,050,633",
    "Volume": "$5,271,100,860",
    "Open": "$1,205.66",
    "Close": "N/A"
  },
  {
    "Date": "2022-11-26",
    "Market Cap": "$144,810,246,845",
    "Volume": "$5,823,202,533",
    "Open": "$1,198.98",
    "Close": "$1,205.66"
  },
  {
    "Date": "2022-11-25",
    "Market Cap": "$145,091,739,838",
    "Volume": "$6,955,523,718",
    "Open": "$1,204.21",
    "Close": "$1,198.98"
  },
// ...
// ... 
]

Anda telah berhasil mengimplementasikan web scraper menggunakan Python. Untuk melihat kode lengkapnya, Anda dapat mengunjungi repo GitHub ini.

Kesimpulan

Artikel ini membahas bagaimana Anda bisa mengimplementasikan goresan Python sederhana. Kami membahas bagaimana BeautifulSoup dapat digunakan untuk mengorek data dengan cepat dari situs web. Kami juga membahas perpustakaan lain yang tersedia dan mengapa Python adalah pilihan pertama bagi banyak pengembang untuk mengorek situs web.

Anda juga dapat melihat kerangka kerja pengikisan web ini.