Pada artikel sebelumnya kita telah sukses melakukan web scraping single-quote dari halaman http://quotes.toscrape.com/ dengan library BeautifulSoup di Python. Selanjutnya kita akan mengambil multi-quote dari satu halaman
Kalau kita lihat http://quotes.toscrape.com/ pada halaman pertama terdapat 20 quote. Berikut adalah contoh 3 quote-nya
Jika dilakukan inspect element maka diketahui bahwa tag HTML yang digunakan oleh setiap quote adalah sama
Berikut adalah outer HTML dari quote
Bahwa setiap quote berada di tag <div>
dengan nama class quote
Di dalam tag <div>
baru terdapat tag-tag HTML lainnya untuk menyimpan konten seperti quote, author, dan tags
Berikut adalah satu contoh kode HTML dari satu qoute
Scrap all quotes
Karena setiap quote kode HTML yang digunakan sama gunakan fungsi find_all()
untuk mengambil semua konten quote dalam satu halaman
Jika menggunakan fungsi find()
hanya quote pertama yang akan diambil (seperti pada materi scraping single quote)
Gunakan tag <div>
dengan nama class quote
from bs4 import BeautifulSoup import requests page = requests.get("http://quotes.toscrape.com/") soup = BeautifulSoup(page.content, 'html.parser') quotes = soup.find_all('div', class_='quote') print(quotes)
Setelah mendapatkan konten dari setiap quote selanjutnya setiap quote akan diambil konten text quote, author, dan tags
-nya
Untuk memudahkan mengambil konten setiap quote gunakan perulangan.
Note : Silahkan baca materi perulangan di python
Berikut adalah kodenya untuk mengambil setiap elemen di quote menggunakan perulangan
for q in quotes: quote = q.find('span', class_='text').text author = q.find('small', class_='author').text tags = [tag.text for tag in q.find('div', class_='tags').find_all('a', class_='tag')]
quotes
merupakan list dari semua quote yang diambil dengan BeautifulSoup
Setiap iterasi dalam quotes
akan diambil konten quote, author, dan tags
-nya
Hasilnya adalah
Final Code
Berikut adalah final code untuk web scraping multi-quote dalam di halaman pertama
from bs4 import BeautifulSoup import requests page = requests.get("http://quotes.toscrape.com/") soup = BeautifulSoup(page.content, 'html.parser') quotes = soup.find_all('div', class_='quote') for q in quotes: quote = q.find('span', class_='text').text author = q.find('small', class_='author').text tags = [tag.text for tag in q.find('div', class_='tags').find_all('a', class_='tag')] print(quote) print(author) print(tags)