setelah sekian lama nggak bahas tentang scraping, kali ini kita membahas lagi tentang studi kasus scraping yaitu bagaimana cara mendownload konten image atau gambar dari sebuah website, pastikan sebelum mengikuti tutorial ini kamu sudah paham tentang python dasar yup langsung ke step
Persiapan Project
ada beberapa hal yang perlu disiapkan untuk membuat scraping website sekaligus untuk mendownload sebuah gambar, berikut persiapanya
Install Dependensi yang dibutuhkan
pertama kita membuat virtualenv atau virtual environtment terlebih dahulu dengan perintah
virtualenv -p python3 venv
perintah diatas untuk membuat virtualenv dengan nama venv
langkah selanjutnya install modul requests
dan beautifulsoup4
menggunakan pip dengan perintah
pip install requests Beautifulsoup4
setelah terinstall selanjutnya buat file baru bernama image_downloader.py
dengan perintah
touch image_downloader.py
Studi Kasus Web Scraping
kita tentukan dulu website yang akan kita scraping.
disarankan memakai website yang berbeda agar dapat mengetahui penerapan scraping pada suatu web
pada studi kasus kali ini kita akan scraping website: https://www.airbnb.com dalam kasus ini kita akan mengambil gambar dari situs tersebut dan menyimpanya ke dalam komputer kita (lokal).
program yang akan kita buat mempunyai dasar seperti ini
import requests
from bs4 import BeautifulSoup
# headers
headers = {
'user-agent':'Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:79.0) Gecko/20100101 Firefox/79.0'
}
# define url
url = 'https://www.airbnb.com/s/Indonesia--Bali--Badung-Regency--Kuta--%EC%84%B8%EB%AF%B8%EB%83%91/homes?tab_id=home_tab&refinement_paths%5B%5D=%2Fhomes&query=Indonesia%2C%20Bali%2C%20Badung%20Regency%2C%20Kuta%2C%20%EC%84%B8%EB%AF%B8%EB%83%91&place_id=ChIJ_8h84N9G0i0R0P2CyvsLAwU&checkin=2020-10-31&checkout=2020-11-06&source=structured_search_input_header&search_type=autocomplete_click'
res = requests.get(url, headers=headers)
# scraping process
soup = BeautifulSoup(res.text, 'html.parser')
# find images
images = soup.find_all('img')
# getting image
for image in images:
link = image['src']
name = image['alt']
# save images
with open(name.replace(' ', '-').replace('/', '').replace('*', '') + '.jpg', 'wb') as f:
im = requests.get(link)
f.write(im.content)
Penjelasan Program
di awal awal kita sudah menginstall modul yang dibutuhkan kemudian kita import modulnya di paling atas
import requests
from bs4 import BeautifulSoup
pada langkah selanjutnya kita definisikan headers browser yang kita gunakan (saya menggunakan google chrome), untuk mengetahui headers yang digunakan bisa mencari whats my user agent di google whats my user agent
headers = {
'user-agent':'Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:79.0) Gecko/20100101 Firefox/79.0'
}
tujuanya agar kita seolah-olah menggunakan browser yang kita punya agar tidak terdeteksi sebagai bot oleh sistem situs yang akan kita scraping.
langkah selanjutnya kita melakukan requests ke website target lalu kita parsing menggunakan beautifulsoup
# scraping process
soup = BeautifulSoup(res.text, 'html.parser')
# find images
images = soup.find_all('img')
# getting image
for image in images:
link = image['src']
name = image['alt']
# save images
with open(name.replace(' ', '-').replace('/', '').replace('*', '') + '.jpg'>
im = requests.get(link)
f.write(im.content)
Final Code
berikut adalah final code nya
import requests
from bs4 import BeautifulSoup
# headers
headers = {
'user-agent':'Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:79.0) Gecko/20100101 Firefox/79.0'
}
# define url
url = 'https://www.airbnb.com/s/Indonesia--Bali--Badung-Regency--Kuta--%EC%84%B8%EB%AF%B8%EB%83%91/homes?tab_id=home_tab&refinement_paths%5B%5D=%2Fhomes&query=Indonesia%2C%20Bali%2C%20Badung%20Regency%2C%20Kuta%2C%20%EC%84%B8%EB%AF%B8%EB%83%91&place_id=ChIJ_8h84N9G0i0R0P2CyvsLAwU&checkin=2020-10-31&checkout=2020-11-06&source=structured_search_input_header&search_type=autocomplete_click'
res = requests.get(url, headers=headers)
# scraping process
soup = BeautifulSoup(res.text, 'html.parser')
# find images
images = soup.find_all('img')
# getting image
for image in images:
link = image['src']
name = image['alt']
# save images
with open(name.replace(' ', '-').replace('/', '').replace('*', '') + '.jpg', 'wb') as f:
im = requests.get(link)
f.write(im.content)
jika dijalankan maka hasilnya seperti ini
Kreasikan Program
setelah mengetahui struktur dasar dari progra kita dapat menambahkan beberapa fungsi seperti
- membuat directory
- generate nama file
Membuat Directory
kita dapat memanfaatkan modul os
pada python untuk membuat directory seperti ini
# create directory
try:
os.mkdir(os.path.join(os.getcwd(), folder))
except:
pass
# change directory
os.chdir(os.path.join(os.getcwd(), folder))
jika kita terapkan dalam program tadi hasilnya seperti ini
Final Code + Create Directory
import os
import requests
from bs4 import BeautifulSoup
# headers
headers = {
'user-agent':'Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:79.0) Gecko/20100101 Firefox/79.0'
}
# define url
# url = 'https://www.airbnb.com/s/Indonesia--Bali--Badung-Regency--Kuta--%EC%84%B8%EB%AF%B8%EB%83%91/homes?tab_id=home_tab&refinement_paths%5B%5D=%2Fhomes&query=Indonesia%2C%20Bali%2C%20Badung%20Regency%2C%20Kuta%2C%20%EC%84%B8%EB%AF%B8%EB%83%91&place_id=ChIJ_8h84N9G0i0R0P2CyvsLAwU&checkin=2020-10-31&checkout=2020-11-06&source=structured_search_input_header&search_type=autocomplete_click'
def images_downloads(url,folder):
# create directory
try:
os.mkdir(os.path.join(os.getcwd(), folder))
except:
pass
# change directory
os.chdir(os.path.join(os.getcwd(), folder))
res = requests.get(url, headers=headers)
# scraping process
soup = BeautifulSoup(res.text, 'html.parser')
# find images
images = soup.find_all('img')
# getting image
for image in images:
link = image['src']
name = image['alt']
# save images
with open(name.replace(' ', '-').replace('/', '').replace('*', '') + '.jpg', 'wb') as f:
im = requests.get(link)
f.write(im.content)
print('writing data: ', name)
# testing
url = 'https://www.airbnb.com/s/Indonesia--Bali--Badung-Regency--Kuta--%EC%84%B8%EB%AF%B8%EB%83%91/homes?tab_id=home_tab&refinement_paths%5B%5D=%2Fhomes&query=Indonesia%2C%20Bali%2C%20Badung%20Regency%2C%20Kuta%2C%20%EC%84%B8%EB%AF%B8%EB%83%91&place_id=ChIJ_8h84N9G0i0R0P2CyvsLAwU&checkin=2020-10-31&checkout=2020-11-06&source=structured_search_input_header&search_type=autocomplete_click'
images_downloads(url, 'bali_hotel')
sampai disini studi kasus kali ini selamat mencoba dan semoga bermanfaat