Berikut adalah contoh scraping web imdb untuk mengambil poster dari top 250 movies. Pada contoh program dibatasi 5 poster saja untuk testing. Jika ingin mendownload semua poster, tinggal dihapus bagian if statement.
Pendekatan yang dilakukan adalah akses web imdb 1 kali, download html kedalam teks file, berikutnya cukup membuka teks file dan melakukan scraping dari teks tersebut. Hal ini dilakukan karena saat scraping kita sering melakukan trial and error, cukup menjemukan bila harus terus download html dari internet dengan kondisi internet yang kurang stabil dan selain itu juga kita berusaha bandwidth friendly.
Berikut adalah script yang digunakan untuk download halaman 250 top movie dari imdb dengan url : https://www.imdb.com/chart/top?ref_=nv_mv_250
Nama file image yang akan kita download ada di dalam <td class="postercolumn">. Nama file dari poster ukuran besar merupakan bagian poster thumbnail.
Nama file thumbnail :
https://m.media-amazon.com/images/M/MV5BMDFkYTc0MGEtZmNhMC00ZDIzLWFmNTEtODM1ZmRlYWMwMWFmXkEyXkFqcGdeQXVyMTMxODk2OTU@._V1_UY67_CR0,0,45,67_AL_.jpg
Nama file poster besar:
https://m.media-amazon.com/images/M/MV5BMDFkYTc0MGEtZmNhMC00ZDIzLWFmNTEtODM1ZmRlYWMwMWFmXkEyXkFqcGdeQXVyMTMxODk2OTU@._V1_AL_.jpg
Jadi kita bisa mendapatkan poster besar dengan memotong bagian _UY67_CR0,0,45,67
Berikutnya untuk memberikan nama file digunakan nama movie berserta peringkat dan tahun tampil. Data tersebut ada di <td class="titleColumn">
Pendekatan yang dilakukan adalah akses web imdb 1 kali, download html kedalam teks file, berikutnya cukup membuka teks file dan melakukan scraping dari teks tersebut. Hal ini dilakukan karena saat scraping kita sering melakukan trial and error, cukup menjemukan bila harus terus download html dari internet dengan kondisi internet yang kurang stabil dan selain itu juga kita berusaha bandwidth friendly.
Berikut adalah script yang digunakan untuk download halaman 250 top movie dari imdb dengan url : https://www.imdb.com/chart/top?ref_=nv_mv_250
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
import os
from bs4 import BeautifulSoup
chrome_options = Options()
chrome_options.add_argument("--headless")
chrome_options.add_argument("--window-size=1920x1080")
chrome_driver = os.getcwd() +"\\chromedriver.exe"
url = 'https://www.imdb.com/chart/top?ref_=nv_mv_250'
driver = webdriver.Chrome(chrome_options=chrome_options, executable_path=chrome_driver)
driver.get(url)
soup = BeautifulSoup(driver.page_source,'lxml')
with open('imdb.txt', 'w', encoding='utf-8') as f_out:
f_out.write(soup.prettify())
driver.quit()
Nama file image yang akan kita download ada di dalam <td class="postercolumn">. Nama file dari poster ukuran besar merupakan bagian poster thumbnail.
Nama file thumbnail :
https://m.media-amazon.com/images/M/MV5BMDFkYTc0MGEtZmNhMC00ZDIzLWFmNTEtODM1ZmRlYWMwMWFmXkEyXkFqcGdeQXVyMTMxODk2OTU@._V1_UY67_CR0,0,45,67_AL_.jpg
Nama file poster besar:
https://m.media-amazon.com/images/M/MV5BMDFkYTc0MGEtZmNhMC00ZDIzLWFmNTEtODM1ZmRlYWMwMWFmXkEyXkFqcGdeQXVyMTMxODk2OTU@._V1_AL_.jpg
Jadi kita bisa mendapatkan poster besar dengan memotong bagian _UY67_CR0,0,45,67
jpg_link = poster_img[i].split('V1')[0] + 'V1_.jpg'
Berikutnya untuk memberikan nama file digunakan nama movie berserta peringkat dan tahun tampil. Data tersebut ada di <td class="titleColumn">
import requests
from bs4 import BeautifulSoup
import os
def read_file():
file = open(current_path + '\\imdb.txt')
data = file.read()
file.close()
return data
current_path = os.path.dirname(os.path.abspath(__file__))
soup = BeautifulSoup(read_file(),'lxml')
poster_col = soup.find('table', class_ = 'chart').find_all('td', class_='posterColumn')
poster_img = [td.a.img['src'] for td in poster_col]
d_movall = {}
i=0
mov_col = soup.find('table', class_='chart').find_all('td', class_='titleColumn')
for td in mov_col:
if i == 5:
break
full_title = (td.text.strip().replace('\n','').replace(' ',''))
rank = full_title.split('.')[0]
title = full_title.split('.')[1][:-6]
title = title.replace(':', '')
year = full_title.split('.')[1][-5:-1]
s = rank + '-' + title + '-' + year
#a = td.a['href']
#lst_movdet.append(s)
jpg_link = poster_img[i].split('V1')[0] + 'V1_.jpg'
d_movall[s] = jpg_link
i += 1
with open(current_path + '\\imgdump\\' + s +'.jpg', 'wb') as f_out:
f_out.write(requests.get(jpg_link).content)
Web Scraping : IMDB Poster - Latihan 2
Reviewed by noname needed
on
May 25, 2018
Rating:
No comments: