Pada catatan ini kita akan mencoba membuat program untuk scraping web consumerreport.org. Yang akan kita scrap adalah product category.
Untuk melakukan scraping bisa lakukan secara online, artinya program mengakses page dan langsung melakukan scraping.
Pada latihan ini pendekatan offline, download dahulu page ke lokal storage dan disimpan sebagai file txt.
import requests
from fake_useragent import UserAgent
url = 'http://www.consumerreports.org/cro/a-to-z-index/products/index.htm'
file_name = 'consumer_reports.txt' # output file name
user_agent = UserAgent()
page = requests.get(url,headers={'user-agent':user_agent.chrome})
with open(file_name,'w') as file:
file.write(page.content.decode('utf-8')) if type(page.content) == bytes else file.write(page.content)
Setalah kita simpan ke lokal, kita buat program terpisah untuk open file tersebut lalu melakukan scraping data.
Struktur html dari consumerreport.org sudah berubah, berikut saya include file html saat membuat program ini. https://drive.google.com/open?id=1F9pVbmgRbxGCBTLBfGGhmH1SlynQE_lQ
Untuk mendapatkan nama produk, kita gunakan list comprehension dengan membaca isi div.div.a.span.string
product_names = [div.div.a.span.string for div in target_element]
Untuk mendapatkan link, kita baca isi dari div.div.a['href']
product_links = [div.div.a['href'] for div in target_element]
Bila kita ingin membuat dictionary dengan isi key adalah nama produk, dan value adalah link div.div.a.span.string:div.div.a['href']
products = {div.div.a.span.string:div.div.a['href'] for div in target_element}
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
product_names = [div.div.a.span.string for div in ]
product_links = [div.div.a['href'] for div in target_element]
products = {div.div.a.span.string:div.div.a['href'] for div in target_element}
for key,value in products.items():
print(key , ' -->',value)
Perhatian
Ada perubahan dari web consumerreport.org , Script python yang dibuat disini tidak akan berjalan karena perbedaan struktur html.
Web Scraping - Consumer Report - Latihan 1
Reviewed by noname needed
on
May 25, 2018
Rating:
No comments: