Web Scraping dengan Python |
Berjumlah kembali dengan blog sederhana ini. Pada unggahan kali ini, kita akan belajar bersama mengenai teknik paling dasar melakukan web scraping menggunakan Python.
Seperti yang telah kita tahu, bahwa salah satu cara untuk memperoleh data yang bisa kita gunakan dalam riset atau penelitian saat ini tidak hanya dari survei atau sensus, tetapi juga dari internet. Kehadiran internet yang menyediakan beragam data dan informasi sangat potensial menjadi lahan sumber data baru untuk kebermanfaatan atau kebaikan.
Di internet banyak kita jumpai situs-situs yang menarik dan bisa dieksplorasi secara mendalam untuk meningkatkan manfaat dan mengembangkan ilmu pengetahuan. Untuk memperoleh data dan informasi dari internet, kita biasa menggunakan teknik perambaan atau web scraping baik dengan tujuan menambang data (data mining) maupun menambang teks (text mining).
Dalam kesempatan ini, situs yang menjadi target web scraping kita adalah situs kumpulan quote dengan alamat URL https://quotes.toscrape.com/, sebuah situs yang menyediakan kumpulan quote dari para pakar dan ahli ilmu pengetahuan dan teknologi. Berikuta sekilas tampilan laman depan situs tersebut:
Situs kumpulan quote |
Dari situs ini, kita akan mencoba memperoleh 2 data, yaitu data teks quote itu sendiri serta data author dari setiap quote. Kemudian dari hasil web scraping, kita coba eksplorasi sedikit untuk dianalisis sehingga memperkaya informasi atau insight.
Namun, sebelum itu, ada pertanyaan besar yang selama ini viral didiskusikan, apakah web scraping adalah aktivitas ilegal?
Jawaban dari pertanyaan ini masih debatable. Namun, dari sudut pandang saya sendiri, selama aktivitas web scraping ini tidak bertujuan untuk merugikan pihak lain dan selama data yang discrape adalah data-data yang bersifat public (data umum dan secara bebas disebarkan), maka it's ok. Berbeda bila aktivitas hacking yang kita lakukan seperti hijacking atau melakukan pencurian data yang bersifat rahasia dan merugikan pihak lain, maka ini sungguh dilarang dan tidak diperbolehkan.
Baik, untuk melakukan web scraping dengan Python, ada beberapa tahapan yang harus dilalui, yaitu:
1. Menyiapkan web scraper, dalam unggahan ini kita coba menggunakan scrapy;
2. Menjelajahi situs target dengan menggunakan fungsi inspect element pada Mozila atau Chrome;
3. Menjalankan web scraper berdasarkan node hasil inspect element situs yang mengandung data atau informasi yang kita butuhkan;
4. Konversi ke dalam dataframe;
5. Analisis data.
Untuk mengimplementasikan web scraping dengan Python, langkah-langkahnya adalah sebagai berikut:
#Import dan aktivasi package
import pandas as pd
import requests
from scrapy.http import TextResponse
#Deklarasi alamat situs
url = "https://quotes.toscrape.com/"
res = requests.get(url)
respon = TextResponse(res.url, body = res.text, encoding = "utf-8")
#Melihat status web scraping
quoteku = respon.css("div.row")
quoteku
[<Selector xpath="descendant-or-self::div[@class and contains(concat(' ', normalize-space(@class), ' '), ' row ')]" data='<div class="row header-box">\n ...'>, <Selector xpath="descendant-or-self::div[@class and contains(concat(' ', normalize-space(@class), ' '), ' row ')]" data='<div class="row">\n <div class="col...'>]
#Melakukan scrape quote
quote = respon.css("div.quote span.text::text").getall()
quote = pd.DataFrame({'quote':quote})
quote
quote | |
---|---|
0 | “The world as we have created it is a process ... |
1 | “It is our choices, Harry, that show what we t... |
2 | “There are only two ways to live your life. On... |
3 | “The person, be it gentleman or lady, who has ... |
4 | “Imperfection is beauty, madness is genius and... |
5 | “Try not to become a man of success. Rather be... |
6 | “It is better to be hated for what you are tha... |
7 | “I have not failed. I've just found 10,000 way... |
8 | “A woman is like a tea bag; you never know how... |
9 | “A day without sunshine is like, you know, nig... |
#Melakukan scrape author setiap quote
author = respon.css("div.quote small.author::text").getall()
author = pd.DataFrame({'author': author})
author
author | |
---|---|
0 | Albert Einstein |
1 | J.K. Rowling |
2 | Albert Einstein |
3 | Jane Austen |
4 | Marilyn Monroe |
5 | Albert Einstein |
6 | André Gide |
7 | Thomas A. Edison |
8 | Eleanor Roosevelt |
9 | Steve Martin |
#Menggabungkan data quote dan author
quotetoscrape = pd.concat([quote, author], axis=1)
quotetoscrape
quote | author | |
---|---|---|
0 | “The world as we have created it is a process ... | Albert Einstein |
1 | “It is our choices, Harry, that show what we t... | J.K. Rowling |
2 | “There are only two ways to live your life. On... | Albert Einstein |
3 | “The person, be it gentleman or lady, who has ... | Jane Austen |
4 | “Imperfection is beauty, madness is genius and... | Marilyn Monroe |
5 | “Try not to become a man of success. Rather be... | Albert Einstein |
6 | “It is better to be hated for what you are tha... | André Gide |
7 | “I have not failed. I've just found 10,000 way... | Thomas A. Edison |
8 | “A woman is like a tea bag; you never know how... | Eleanor Roosevelt |
9 | “A day without sunshine is like, you know, nig... | Steve Martin |
#Melihat jumlah kata setiap quote
quotetoscrape["jml_kata"] = quotetoscrape.quote.str.split().str.len()
quotetoscrape
quote | author | jml_kata | |
---|---|---|---|
0 | “The world as we have created it is a process ... | Albert Einstein | 21 |
1 | “It is our choices, Harry, that show what we t... | J.K. Rowling | 16 |
2 | “There are only two ways to live your life. On... | Albert Einstein | 26 |
3 | “The person, be it gentleman or lady, who has ... | Jane Austen | 19 |
4 | “Imperfection is beauty, madness is genius and... | Marilyn Monroe | 16 |
5 | “Try not to become a man of success. Rather be... | Albert Einstein | 14 |
6 | “It is better to be hated for what you are tha... | André Gide | 19 |
7 | “I have not failed. I've just found 10,000 way... | Thomas A. Edison | 12 |
8 | “A woman is like a tea bag; you never know how... | Eleanor Roosevelt | 19 |
9 | “A day without sunshine is like, you know, nig... | Steve Martin | 9 |
#Aktivasi package visualisasi wordcloud
from wordcloud import WordCloud
from wordcloud import ImageColorGenerator
from wordcloud import STOPWORDS
import matplotlib.pyplot as plt
#Visualisasi wordcloud quote
text = " ".join(i for i in quotetoscrape.quote)
stopwords = set(STOPWORDS)
wordcloud = WordCloud(stopwords=stopwords, background_color="white").generate(text)
plt.figure( figsize=(15,10))
plt.imshow(wordcloud, interpolation='bilinear')
plt.axis("off")
plt.show()
#Visualisasi bar chart jumlah kata setiap quote menurut author
plt.figure( figsize=(15,10))
plt.bar(quotetoscrape.author, quotetoscrape.jml_kata, color ='maroon',
width = 0.4)
plt.xlabel("Author quote")
plt.ylabel("Jumlah kata dalam quote")
plt.title("Jumlah kata setiap quote menurut author")
plt.show()
Dari hasil visualisasi di atas, pada wordcloud terlihat bahwa kata paling banyak digunakan dalam quote pada ahli adalah kata "thingking", "though", "ways", dan "miracle". Pada intinya, kesemua quote yang diberikan pada ahli sebagai wejangan bagi kita adalah untuk selalu berpikir dan menjadi pemikir untuk menemukan jalan keluar dari berbagai permasalahan dalam kehidupan. Sebab, hal itu merupakan bentuk usaha yang boleh jadi menciptakan keajaiban-keajaiban dan anugerah dari Yang Maha Esa.
Berdasarkan bar plot atau bar chart, terlihat bahwa jumlah kata yang dipakai oleh para ahli atau ilmuwan dalam quote-nya paling banyak adalah quote Albert Einstein diikuti Jane Austen, Andre Gide, dan Eleanor Roosevelt. Hasil ini memungkinkan kita untuk meneliti lebih lanjut mengenai korelasi antara jumlah penguasaan kosakata dengan inteligensi seseorang, misalkan berdasarkan jumlah tulisannya atau aspek lainnya.
Demikian sedikit sharing kali ini, semoga sedikit banyak bermanfaat bagi pembaca. Jangan lupa untuk terus mengikuti, menyimak, dan mempraktikkan setiap unggahan menarik, unik, dan terbaru dalam blog sederhana ini. Selamat mempraktikkan!