Proses scrapping kali ini digunakan untuk mengambil data ulasan dari daftar nover terbaik Indonesia. Untuk data case tersebut saya ambil melalui situs goodreads.com dan untuk list novel terbaik yang saya gunakan bisa mengunjungi alamat url berikut https://www.goodreads.com/list/show/67567.Novel_Indonesia_Terbaik. Pada proses scrapping kali ini menggunakan library Python yaitu BeautifulSoup4, di mana library tersebut dapat digunakan untuk melakukan scraping dalam format XML atau HTML.
Dalam kasus ini terdapat dua tahapan untuk melakukan pengambilan data ulasan. Pertama, pengambilan daftar alamat url novel terbaik. Daftar url novel tersebut kemudian disimpan dalam file csv dengan menggunakan kode berikut.
# SCRAPING URL ADDRESS
import requests
import csv
from bs4 import BeautifulSoup
# Write ke file csv
csv_output = csv.writer(open('best-novel-url.csv', 'w', newline=''))
pages = []
# Collecting & parsing konten Web hlm 1-6
for i in range(1, 7):
url = 'https://www.goodreads.com/list/show/67567.Novel_Indonesia_Terbaik?page=' + str(i)
pages.append(url)
for item in pages:
page = requests.get(item)
soup = BeautifulSoup(page.text, 'html.parser')
# Find elemen class bookTitle di dalam class tableList
novel_title_list = soup.find(class_='tableList')
novel_title_list_items = novel_title_list.find_all(class_='bookTitle')
# Get masing-masing title dan url dari class tableList
for novel_title in novel_title_list_items:
link = 'https://www.goodreads.com' + novel_title.get('href') + '?language_code=id'
csv_output.writerow([link])
Pada kode di atas line 2-4 merupakan import library, selanjutnya line 7 digunakan untuk menyimpan data url ke dalam file csv. Untuk menentukan range halaman berapa saja yang ingin dilakukan proses scraping konten url tersebut saya menggunakan perulangan pada line 12-14, sehingga tidak perlu lagi memasukkan page url satu per satu ke dalam kode. Line 16-18 membuat request get untuk mengambil konten raw HTML. Pada line 20-22 kalian dapat melakukan inspeksi konten menggunakan fitur inspect element pada aplikasi browser. Maka dapat menemukan class tertentu yang ingin kita ambil value nya. Dalam kode tersebut menyimpan class bookTitle
pada variabel novel_title_list_items
dimana class bookTitle ini memiliki parent class bernama tableList. Setelah itu line 25-28 barulah kita dapat mengambil value (di kasus ini mengambil nilai atribut href dari class bookTitle) dan ditambahkan format url novel yang disimpan pada variabel link.
Setelah kita mendapatkan daftar alamat url novel terbaik kemudian pada tahap kedua adalah melakukan pengambilan data ulasan pada masing-masing novel. Proses ini dilakukan menggunakan kode berikut.
# SCRAPING REVIEW DATA FROM CSV FILE
import requests
from bs4 import BeautifulSoup
import csv
#Read input url dari file csv & write output review
with open('best-novel-url.csv', newline='') as f_urls, open('data-review.csv', 'w', newline='', encoding="utf-8") as f_output:
csv_urls = csv.reader(f_urls)
csv_output = csv.writer(f_output)
csv_output.writerow(['Nama', 'Ulasan', 'Rating'])
# Collecting & parsing konten web
for line in csv_urls:
r = requests.get(line[0]).text
soup = BeautifulSoup(r, 'lxml')
# Find elemen class review di dalam id bookReviews
novel_review_list = soup.find('div', {'id': 'bookReviews'})
novel_review_list_items = novel_review_list.find_all(class_='review')
# Get masing-masing nama & review dari class bookReviews
for novel_review in novel_review_list_items:
name = novel_review.find(class_='user').get_text()
review = novel_review.find(class_='readable').find('span', recursive=False).get_text()
rating_element = novel_review.find('span', {'size': '15x15'})
# Skip item review ketika elemen rating tidak ditemukan
if rating_element == None:
continue
else :
rating = rating_element.get_text()
csv_output.writerow([name, review, rating])
Proses tersebut kurang lebih sama dengan proses pengambilan data url novel hanya saja proses pengambilan data nya dilakukan melalui alamat url novel yang sudah disimpan dalam format csv. Dari kode tersebut akan menghasilkan data yang berupa daftar nama user, ulasan dan nilai rating yang diberikan. Bagi teman-teman yang ingin memahami prosesnya silakan dapat menjalankan kode di atas secara langsung. Dengan memanfaatkan fitur inspeksi elemen pada browser tentunya dari kode di atas juga dapat dilakukan modifikasi sesuai dengan kasus penelitian yang Anda lakukan.
Kode tersebut juga tersedia dalam format .py (python) dan .ipynb (jupyter notebook) melalui repository berikut https://github.com/rifqifai/web-scraping.