Pengikisan data ecommerce untuk detail produk berguna untuk melakukan analisis kompetitif, pemantauan harga, dan melakukan riset pasar. Scraping data dari halaman produk dapat dilakukan dengan mudah menggunakan Python. Tutorial scraping ecommerce ini akan menunjukkan kepada Anda cara mengambil informasi menggunakan kombinasi permintaan dan lxml dari toko online.
Mengikis halaman web untuk e-commerce terdiri dari mendapatkan informasi produk seperti judul, harga, atau nomor pengenal dari toko-toko di internet. Banyaknya pustaka yang tersedia di Python membuat hal ini tidak hanya mudah tetapi juga cukup efisien. Pada artikel ini, kita akan fokus pada web scraping situs web e-commerce menggunakan Python. Situs web Costco akan menjadi objek kita.
Untuk memulainya, mari kita pastikan kita memiliki semua alat atau pustaka scraping ecommerce Python yang tersedia yang akan kita perlukan untuk skrip ini:
pip install requests
pip install lxml
Kami akan fokus pada mengekstrak nama produk, fitur, dan merek dari halaman tertentu di situs web.
Untuk memulai membangun scraper produk e-commerce, pertama-tama Anda harus memahami bagaimana sebuah halaman web terstruktur. Buka situs web dan buka halaman yang ingin Anda kumpulkan informasinya, dan periksa elemen-elemen yang diperlukan (misalnya nama produk, fitur, merek, dll.).
Pertama, kita akan mengimpor pustaka permintaan untuk mengirim GET khususnya untuk halaman produk. Selain itu, kita juga akan mengonfigurasi tajuk permintaan agar menyerupai permintaan peramban.
import requests
# Daftar URL produk yang akan dikikis
urls = [
"https://www.costco.com/kirkland-signature-men's-sneaker.product.4000216649.html",
"https://www.costco.com/adidas-ladies'-puremotion-shoe.product.4000177646.html"
]
headers = {
'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7',
'accept-language': 'en-US,en;q=0.9',
'cache-control': 'no-cache',
'dnt': '1',
'pragma': 'no-cache',
'sec-ch-ua': '"Not/A)Brand";v="99", "Google Chrome";v="91", "Chromium";v="91"',
'sec-ch-ua-mobile': '?0',
'sec-fetch-dest': 'document',
'sec-fetch-mode': 'navigate',
'sec-fetch-site': 'same-origin',
'sec-fetch-user': '?1',
'upgrade-insecure-requests': '1',
'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36',
}
# Ulangi setiap URL dan kirimkan permintaan GET
for url in urls:
response = requests.get(url, headers=headers)
if response.status_code == 200:
html_content = response.text
# Pemrosesan lebih lanjut akan ditambahkan pada langkah selanjutnya
else:
print(f"Failed to retrieve {url}. Status code: {response.status_code}")
Dengan lxml, kita akan mengekstrak info yang diinginkan dari html. Hal ini sangat penting ketika berurusan dengan pengikisan data e-commerce.
from lxml import html
# Daftar untuk menyimpan data yang dikikis
scraped_data = []
# Ulangi setiap URL dan kirimkan permintaan GET
for url in urls:
response = requests.get(url)
if response.status_code == 200:
html_content = response.content
# Mengurai konten HTML dengan lxml
tree = html.fromstring(html_content)
# Mengekstrak data menggunakan XPath
product_name = tree.xpath('//h1[@automation-id="productName"]/text()')[0].strip()
product_feature = tree.xpath('//ul[@class="pdp-features"]//li//text()')
product_brand = tree.xpath('//div[@itemprop="brand"]/text()')[0].strip()
# Menambahkan data yang diekstrak ke daftar
scraped_data.append({'Product Name': product_name, 'Product Feature': product_feature, 'Brand': product_brand})
else:
print(f"Failed to retrieve {url}. Status code: {response.status_code}")
# Mencetak data yang dikikis
for item in scraped_data:
print(item)
Ketika kita mencoba mengikis situs web e-niaga dengan Python, kita perlu memahami bahwa sebagian besar situs web memiliki beberapa bentuk perangkat lunak anti-bot. Menggunakan proxy dan agen pengguna bergilir dapat membantu mengurangi kecurigaan mereka.
Menggunakan proxy dengan otorisasi IP:
proxies = {
'http': 'http://your_proxy_ip:your_proxy_port',
'https': 'https://your_proxy_ip:your_proxy_port'
}
response = requests.get(url, proxies=proxies)
Memutar Agen Pengguna:
import random
user_agents = [
'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36',
'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36',
# Tambahkan lebih banyak agen pengguna sesuai kebutuhan
]
headers['user-agent'] = random.choice(user_agents)
response = requests.get(url, headers=headers)
Pada akhirnya, data yang diekstrak akan disimpan dalam format CSV sehingga saya dapat menganalisisnya nanti untuk proses scraping data e-commerce yang lebih lanjut.
import csv
csv_file = 'costco_products.csv'
fieldnames = ['Product Name', 'Product Feature', 'Brand']
# Menulis data ke file CSV
try:
with open(csv_file, mode='w', newline='', encoding='utf-8') as file:
writer = csv.DictWriter(file, fieldnames=fieldnames)
writer.writeheader()
for item in scraped_data:
writer.writerow(item)
print(f"Data saved to {csv_file}")
except IOError:
print(f"Error occurred while writing data to {csv_file}")
Berikut ini adalah versi final dari skrip untuk pengikisan data e-commerce yang efektif. Anda dapat menyalin dan menempelkannya agar mudah digunakan.
import requests
import urllib3
from lxml import html
import csv
import random
import ssl
ssl._create_default_https_context = ssl._create_stdlib_context
urllib3.disable_warnings()
# Daftar URL produk yang akan dikikis
urls = [
"https://www.costco.com/kirkland-signature-men's-sneaker.product.4000216649.html",
"https://www.costco.com/adidas-ladies'-puremotion-shoe.product.4000177646.html"
]
# headers
headers = {
'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7',
'accept-language': 'en-US,en;q=0.9',
'cache-control': 'no-cache',
'dnt': '1',
'pragma': 'no-cache',
'sec-ch-ua': '"Not/A)Brand";v="99", "Google Chrome";v="91", "Chromium";v="91"',
'sec-ch-ua-mobile': '?0',
'sec-fetch-dest': 'document',
'sec-fetch-mode': 'navigate',
'sec-fetch-site': 'same-origin',
'sec-fetch-user': '?1',
'upgrade-insecure-requests': '1',
'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36',
}
# Daftar agen pengguna untuk permintaan bergilir
user_agents = [
'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36',
'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36',
# Tambahkan lebih banyak agen pengguna sesuai kebutuhan
]
# Daftar proxy untuk permintaan bergilir
proxies = [
{'http': 'http://your_proxy_ip:your_proxy_port', 'https': 'https://your_proxy_ip:your_proxy_port'},
{'http': 'http://your_proxy_ip2:your_proxy_port2', 'https': 'https://your_proxy_ip2:your_proxy_port2'},
# Tambahkan lebih banyak proxy sesuai kebutuhan
]
# Daftar untuk menyimpan data yang dikikis
scraped_data = []
# Ulangi setiap URL dan kirimkan permintaan GET
for url in urls:
# Pilih agen pengguna secara acak untuk tajuk permintaan
headers['user-agent'] = random.choice(user_agents)
# Pilih proxy acak untuk permintaan tersebut
proxy = random.choice(proxies)
# Kirim permintaan HTTP GET ke URL dengan header dan proxy
response = requests.get(url, headers=headers, proxies=proxy, verify=False)
if response.status_code == 200:
# Menyimpan konten HTML dari respons
html_content = response.content
# Mengurai konten HTML dengan lxml
tree = html.fromstring(html_content)
# Mengekstrak data menggunakan XPath
product_name = tree.xpath('//h1[@automation-id="productName"]/text()')[0].strip()
product_feature = tree.xpath('//ul[@class="pdp-features"]//li//text()')
product_brand = tree.xpath('//div[@itemprop="brand"]/text()')[0].strip()
# Menambahkan data yang diekstrak ke daftar
scraped_data.append({'Product Name': product_name, 'Product Feature': product_feature, 'Brand': product_brand})
else:
# Mencetak pesan kesalahan jika permintaan gagal
print(f"Failed to retrieve {url}. Status code: {response.status_code}")
# Pengaturan file CSV
csv_file = 'costco_products.csv'
fieldnames = ['Product Name', 'Product Feature', 'Brand']
# Menulis data ke file CSV
try:
with open(csv_file, mode='w', newline='', encoding='utf-8') as file:
writer = csv.DictWriter(file, fieldnames=fieldnames)
writer.writeheader()
for item in scraped_data:
writer.writerow(item)
print(f"Data saved to {csv_file}")
except IOError:
# Mencetak pesan kesalahan jika penulisan ke file gagal
print(f"Error occurred while writing data to {csv_file}")
Scraper ecommerce Python sudah selesai sekarang.
Penggunaan scraper web ecommerce untuk toko online Costco menunjukkan betapa efektifnya Python dalam memperoleh data produk untuk analisis dan pengambilan keputusan bisnis yang optimal. Dengan skrip dan pustaka yang tepat, yaitu Request dan Lxml untuk menyediakan ekstraktor otomatis, memungkinkan untuk mengikis situs tanpa gangguan alur kerja yang disebabkan oleh API anti-bot. Terakhir, sangat penting untuk selalu mematuhi peraturan etika saat melakukan scraping web e-commerce.
Komentar: 0