Web Scraping Consumer Report

Pada lesson web scrapping consumer report, program akan mengumpulkan data dari consumerreport.org. Informasi yang akan diambil adalah product category.

Untuk melakukan scraping bisa lakukan secara online, artinya program mengakses page dan langsung melakukan scraping.

Pada lesson ini dilakukan pendekatan offline, dimana isi halaman web akan didownload dan disimpan sebagai file text di local storage. Berikut programnya.

from urllib.request import urlopen
html = urlopen("http://www.consumerreports.org/cro/a-to-z-index/products/index.htm")
page_content = html.read()
with open('consumers.html', 'wb') as fid:
     fid.write(page_content)

PERHATIAN Karena desain dari consumerreport.org sudah berubah, program dibawah tidak akan berjalan baik. Program dibawah dibuat masih dengan desain lama. Jika ingin mencoba, silakan download file consumerreport.org yang kami save sebelum perubahan. Download disini.

from bs4 import BeautifulSoup
import os

def read_file():
    current_path = os.path.dirname(os.path.abspath(__file__))
    file = open(current_path + r'\consumer-reports.txt')
    data = file.read()
    file.close()
    return data

soup = BeautifulSoup(read_file(),'lxml')
target_element = soup.find_all('div',class_='entry-letter')
products = {}   # product name - key product link - value
products = {div.div.a.span.string:div.div.a['href'] for div in target_element}

for key,value in products.items():
    print(key , '   -->',value)

Berikut hasil scraping dari program diatas (return dari program kami potong untuk simplisitas)

Air conditioners    --> http://www.consumerreports.org/cro/air-conditioners.htm
Air purifiers    --> http://www.consumerreports.org/cro/air-purifiers.htm
Airline travel    --> http://www.consumerreports.org/cro/airline-travel.htm
.....
.....
.....
.....
.....
Wireless speakers    --> http://www.consumerreports.org/cro/wireless-speakers.htm
Wood stains    --> http://www.consumerreports.org/cro/wood-stains.htm
Yogurt    --> http://www.consumerreports.org/cro/yogurt.htm
Sharing is caring: