• Home
  • About
  • Archives
  • Contact
  • Projects
Logo

  • Data Science
  • Machine Learning
  • Research
  • Tutorial

Proses Scraping Halaman Website Menggunakan Library Python Beautifulsoup4 | Catatan Penelitian #3

9 September 2020
Rifqi Fauzi Rahmadzani
0 Comments
  • Email
  • Facebook
  • Twitter
  • Pinterest
  • LinkedIn
9 September 2020
0 Comments

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.

  • Email
  • Facebook
  • Twitter
  • Pinterest
  • LinkedIn
Previous

Tinjauan Komparatif Tentang Analisis Sentimen | Catatan Penelitian #2

Next

Preprocessing Data Teks Menggunakan Python | Catatan Penelitian #4

The Author

Rifqi Fauzi Rahmadzani

Being someone who is able to contend with my interest and to learn new imaginative, intuitive, and communicative things. The greatest hope of my ability can be beneficial to others.

  • facebook
  • twitter
  • instagram
  • linkedin

Leave A Comment Cancel reply

author image

The Author

Rifqi Fauzi Rahmadzani

  • facebook
  • twitter
  • instagram

Being someone who is able to contend with my interest and to learn new imaginative, intuitive, and communicative things. The greatest hope of my ability can be beneficial to others.

Logo

© 2021 Rifqifai.com. Developed by Rifqi Fauzi Rahmadzani