AWS Case : Scraping Data dengan EC2 dan S3
Cloud, Python

AWS Case : Scraping Data dengan EC2 dan S3

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

AWS Case : Scraping Data dengan EC2 dan S3

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

AWS Case : Scraping Data dengan EC2 dan S3

Hore selamat kita telah menyelesaikan proses data engineering sederhana dengan Python, EC2 dan S3 😀

Leave a Reply

Your email address will not be published. Required fields are marked *