Pada kesempatan kali ini kita akan mencoba case untuk scraping data di EC2 kemudian hasil scraping akan disimpan di AWS S3
Kita akan membuat pipeline sederhana dengan Python dan Library BeautifulSoup untuk scraping data dan Boto3 yaitu SDK Python untuk menggunakan layanan di AWS
Note : Silahkan dipelajari kembali cara menggunakan Library BeautifulSoup dan Library Boto3
Contents
Let’s Rock
Langkah pertama adalah kita buat instance EC2 dengan spek free tier seperti yang telah kita buat di AWS Case : Membuat Webiste dengan Nginx EC2
Kita bisa akses Instance EC2 dengan ssh baik dengan terminal Linux atau putty jika anda adalah pengguna Windows
ssh -i "file.pem" ec2-user@ec2-3-94-186-5.compute-1.amazonaws.com
Kita install Python versi 3 dengan melihat list Python dan install versi Python-nya
sudo yum list | grep python3
sudo yum install python35
Kemudian install PIP
sudo yum install -y python35-setuptools
sudo easy_install-3.5 pip
Install Library
Selanjutnya kita akan menginstall beberapa library yang akan kita gunakan untuk scraping dan akses layanan di AWS
Install Library BeautifulSoup
pip3 install bs4
Install Libray Requests
pip3 install requests
Install Library Boto3
pip3 install boto3
Percobaan 1
Pada percobaan 1 kita akan coba melakukan scraping sederhana untuk mengambil single quote dengan BeautifulSoup di Python EC2
Kita akan lakukan yang sama persis seperti yang telah kita lakukan di artikel tutorial scraping single quote dengan BeautifulSoup
Kita buat file Python di EC2 dengan nama scrapquote.py dengan editor nano perintah
nano scrapquote.py
Kemudian copas kode dibawah ini
from bs4 import BeautifulSoup import requests page = requests.get("http://quotes.toscrape.com/") soup = BeautifulSoup(page.content, 'html.parser') quote = soup.find('span', class_='text').text author = soup.find('small', class_='author').text tags = [tag.text for tag in soup.find('div', class_='tags').find_all('a', class_='tag')] print(quote) print(author) print(tags)
Tekan Ctrl+X dan pilih ‘Y‘ untuk save file di editor nano
Kemudian jalankan script yang telah kita buat tadi dengan perintah
python3 testscrap.py
Hasilnya adalah
Percobaan 2
Pada percobaan 2 kita akan lakukan lebih komplek yaitu melakukan scraping quote untuk semua halaman
Selain itu juga hasil scraping akan kita export menjadi file CSV dan diupload ke S3 secara langsung
Untuk melakukan operasi ke S3 dibutuhkan Library boto3 yang mengharuskan untuk memasukkan credential berupa aws_access_key_id, aws_secret_access_key dan aws_session_token
Kode scraping quote untuk semua halaman adalah seperti di bawah ini atau seperti kode di artikel tutorial scraping all quotes dengan BeautifulSoup
from bs4 import BeautifulSoup import requests import pandas as pd data = [] # quotes di halaman 1 - 10 for page in range(1,11): if page == 1: url = "http://quotes.toscrape.com" else: url = "http://quotes.toscrape.com/page/"+str(page) page = requests.get(url) 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')] data.append({ 'quote': quote, 'author': author, 'tags': tags }) df = pd.DataFrame(data) df.to_csv('all_quotes.csv', index=False, encoding="utf-8")
Pada kode di atas hanya melakukan proses scraping data dari web quotes.toscrape.com. Selanjutnya akan kita modifikasi untuk menambah akses ke AWS S3 dengan library boto3
Pertama buat bucket terlebih dahulu di S3, misal namanya adalah “ngodingdatabucket“. Cara bikin bucket silahkan dibaca di artikel Cara Membuat Bucket di S3 AWS
Tambahkan aws_access_key_id, aws_secret_access_key, aws_session_token yang didapatkan dari AWS
import boto3
session = boto3.Session(
aws_access_key_id="",
aws_secret_access_key="",
aws_session_token=""
)
Kemudian bikin session dan pindah semua file yang digenerate oleh library pandas ke bucket “ngodingdatabucket”
s3 = session.resource('s3')
object = s3.Object('ngodingdatabucket', 'all_quotes.csv')
object.put(Body=all_quotes)
Kode akhir adalah seperti ini
from bs4 import BeautifulSoup import requests import pandas as pd import boto3 data = [] # quotes di halaman 1 - 10 for page in range(1,11): if page == 1: url = "http://quotes.toscrape.com" else: url = "http://quotes.toscrape.com/page/"+str(page) page = requests.get(url) 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')] data.append({ 'quote': quote, 'author': author, 'tags': tags }) df = pd.DataFrame(data) df.to_csv('all_quotes.csv', index=False, encoding="utf-8") # boto3 session = boto3.Session( aws_access_key_id="", aws_secret_access_key="", aws_session_token="" ) s3 = session.resource('s3') s3.Object("ngodingdatabucket", "all_quotes.csv").upload_file( Filename="all_quotes.csv") print("submitted")
File hasil scraping akan muncul di bucket S3
Hore selamat kita telah menyelesaikan proses data engineering sederhana dengan Python, EC2 dan S3 😀