Back

Cara Download Semua Image Dari Website

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).

image cover
image cover

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

hasil-scraping
hasil-scraping

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')

hasil image
hasil image

sampai disini studi kasus kali ini selamat mencoba dan semoga bermanfaat

Licensed under CC BY-NC-SA 4.0
Last updated on Mar 29, 2021 10:49 +0700
comments powered by Disqus
Built with Hugo
Theme Stack designed by Jimmy