Library BeautifulSoup dan Requests

BeautifulSoup

BeautifulSoup sendiri merupakan sebuah Python Library yang digunakan untuk melakukan ekstraksi file dengan format XML atau HTML. Library ini memiliki banyak fungsi yang kita perlukan untuk melakukan ekstraksi informasi dari file kita dan sangat mudah digunakan.

Pertama import seluruh library yang diperlukan. Kali ini, kita juga akan menggunakan menggunakan library urllib untuk melakukan request terhadap website tujuan kita. Library ini tidak perlu diinstall lagi, karena merupakan standard library dari Python sendiri.

from urllib.request import urlopen

from bs4 import BeautifulSoup

Setelah dipastikan bahwa kedua library sudah bisa digunakan, lanjut dengan mengecek apakah kita bisa mengakses website yang akan kita tuju. Oiya, pastikan bahwa komputer kita terhubung dengan internet!

Kemudian, dengan menggunakan salah satu link wikipedia kita akan melakukan request dengan membuka link tersebut dengan menggunakan urlopen yang telah kita import. Sebagai contoh, kita akan melakukan ekstraksi kategori dari halaman wikipedia di wikipedia. Lalu, kita akan melakukan parsing html yang telah didapatkan dengan menggunakan html.parser dari Library BeautifulSoup sendiri.

Setelah dipastikan bahwa kedua library sudah bisa digunakan, lanjut dengan mengecek apakah kita bisa mengakses website yang akan kita tuju. Oiya, pastikan bahwa komputer kita terhubung dengan internet!

Kemudian, dengan menggunakan salah satu link wikipedia kita akan melakukan request dengan membuka link tersebut dengan menggunakan urlopen yang telah kita import. Sebagai contoh, kita akan melakukan ekstraksi kategori dari halaman wikipedia di wikipedia. Lalu, kita akan melakukan parsing html yang telah didapatkan dengan menggunakan html.parser dari Library BeautifulSoup sendiri.

wiki_link = "https://en.wikipedia.org/wiki/Wikipedia"
html = urlopen(wiki_link).read()
soup = BeautifulSoup(html, 'html.parser')

Dengan menggunakan variable soup ini, kita sudah bisa melakukan ekstraksi terhadap informasi yang kita perlukan. Bagaimana cara kita melakukan ekstraksi terhadap categories untuk setiap link wikipedia? Untuk melakukannya, kita perlu membuka link tersebut pada web browser kita dan melakukan inspect element dengan klik kanan pada “Categories” lalu pilih inspect

Window tersebut akan kita gunakan untuk mencari pattern dari Categories sendiri. Bagian Categories ditandai dengan id = “mw-normal-catlinks”. Id ini dapat kita gunakan untuk mendapatkan seluruh informasi yang berada pada satu tag yang sama. Define variable baru untuk menyimpan tabel Categories yang kita temukan dengan menggunakan fungsi find() dari Library BeautifulSoup.

categories_table = soup.find("div", {"id": "mw-normal-catlinks"})

List dari setiap kategori dapat kita temukan pada bagian <ul>…</ul>. Setelah ekstensi tag tersebut, kita dapat menemukan bahwa setiap kategori disimpan dalam bagian tag <li>…<\li>. Dengan menggunakan pattern ini, kita dapat melakukan iterasi untuk setiap kategori yang ada pada list tersebut. Untuk melakukan iterasi, kita dapat menggunakan fungsi findAll() dari Library BeautifulSoup. Lalu outputkan teks dari setiap kategori yang telah ditemukan.

Requests


Request Library

Requests adalah sebuah HTTP library dalam bahasa pemrograman python dengan lisensi open source (Apache2). Library ini menyediakan mekanisme untuk mengirimkan request ke suatu alamat web dengan protokol HTTP/1.1. Library ini menyediakan banyak kemudahan untuk menyesuaikan parameter pada isi request yang dikirim, baik headerform datamulipart files dan parameter lainnya.

Requests adalah modul Python yang bisa kamu gunakan untuk mengirim berbagai request HTTP. Requests adalah library yang mudah digunakan dengan banyak fitur mulai dari melempar parameter dalam URL sampai mengirim header khusus dan verifikasi SSL. Dalam tutorial ini, kamu akan belajar bagaimana menggunakan library ini untuk mengirim request HTTP sederhana dalam Python.

Membuat Request Get

Mengirim request HTTP menggunakan Requests sangat mudah. Kamu mulai dengan mengimpor modul dan membuat request. Berikut ini adalah contohnya:

1
2
import requests
req = requests.get('https://tutsplus.com/')

Semua informasi tentang request kita sekarang disimpan dalam objek Resonse yang bernama req. Contohnya, kamu bisa mendapat encoding dari halaman web menggunakan proprti req.encoding. Kamu juga bisa mendapatkan kode status dari request menggunakan properti req.status_code.

1
2
req.encoding     # returns 'utf-8'
req.status_code  # returns 200

Kamu bisa mengakses cookie yang dikirim balik oleh server menggunakan req.cookies. Begitu pula, kamu bisa mendapat header respon menggunakan req.headers. Properti req.headers mengembalikan kamus case incensitive dari respon header. Ini berarti req.headers['Content-Length']req.headers['content-length'] dan req.headers['CONTENT-LENGTH'] semuanya akan mengembalikan nilai dari 'Content-Length' response header.

Kamu bisa memeriksa apakah respon berupa HTTP redirect yang bisa saja sudah diproses secara otomatis menggunakan properti req.is_redirect. Properti itu akan mengembalikan True atau False berdasarkan respon tersebut. Kamu juga bisa mendapat waktu yang sudah berjalan antara mengirim request dan mendapatkan respon menggunakan properti req.elapsed.

URL yang kamu kirim ke fungsi get() mungkin berbeda dengan URL akhir dari respon karena berbagai alasan, termasuk redirect. Untuk melihat URL respon terakhir, kamu bisa menggunakan properti req.url.

01
02
03
04
05
06
07
08
09
10
11
12
13
import requests
req = requests.get('http://www.tutsplus.com/')
 
req.encoding      # returns 'utf-8'
req.status_code   # returns 200
req.elapsed       # returns datetime.timedelta(0, 1, 666890)
req.url           # returns 'https://tutsplus.com/'
 
req.history     
# returns [<Response [301]>, <Response [301]>]
 
req.headers['Content-Type']
# returns 'text/html; charset=utf-8'

Mendapatkan semua informasi tentang webpage yang kamu akses memang bagus, tapi kemungkinan besar kamu ingin mengakses konten sebenarnya. Jika konten yang kamu akses berupa teks, kamu bisa menggunakan properti req.text untuk mengaksesnya. Konten akan diurai sebagai unicode. Kamu bisa mengetahui jenis encoding untuk mendecode teks menggunakan properti req.encoding.

Dalam kasus respon yang bukan teks, kamu bisa mengaksesnya dalam format binary menggunakan req.content. Modul akan secara otomatis mendecode gzip dan melakukan deflate terhadap encoding selama transfer. Hal ini akan berguna ketika kamu berurusan dengan file media. Begitu pula kamu bisa mengakses konten json-encoded dalam respon, jika memang ada, menggunakan req.json().

Kamu juga bisa menadapat respon mentah dari server menggunakan req.raw. Ingat bahwa kamu perlu melempar stream=True pada request untuk mendapat respon mentah.

Sebagian file yang kamu unduh dari internet menggunakan modul Requests mungkin berukuran besar. Dalam hal itu, tidak bijak untuk membuka keseluruhan respon atau file dalam memori sekaligus. Kamu bisa mendownload file dalam potongan-potongan menggunakan fungsi iter_content(chunk_size=1, decode_unicode=False).

Fungsi ini mengiterasi data respon sejumlah chunk_size byte. Jika pada request diatur stream=True, fungsi ini akan menghindari membaca keseluruhan file ke memori sekaligus untuk respon yang besar. Parameter chunk_size bisa berupa bilangan bulat atau None. Jika diatur sebagai bilangan bulat, chunk_size akan menentukan jumlah byte yang akan dibaca ke memori.

Ketika chunk_size diatur sebagai None dan stream diatur ke True, data akan dibaca saat sampai berapapun ukuran potongan yang diterima. Saat chunk_size diatur menjadi None dan stream diatur False, semua data akan dikembalikan sebagai satu potongan.

Kesimpulan

Konsep yang dibahas pada tutorial ini akan membantu kamu membuat request dasar ke sebuah server dengan mengirim header, cookie, atau query string tertentu. Ini akan sangat berguna ketika kamu ingin mengorek halaman web untuk mendapatkan informasi. Sekarang, kamu juga sudah bisa secara otomatis mengunduh file musik dan wallpaper dari berbagai situs berbeda setelah kamu tahu pola dari URL-nya.

Komentar

Postingan populer dari blog ini

Penyususan sketsa website toko online

Scrape data shopee menggunakan python