Untuk analisis kompetitif, pemantauan harga, dan riset pasar, penting untuk mengikis data produk dari situs web e-commerce. Anda dapat menggunakan Python untuk mengikis data dari halaman produk secara efisien. Dalam panduan ini, kami akan mendemonstrasikan cara mengikis informasi produk dari toko online menggunakan kombinasi permintaan dan lxml.
Scraping e-commerce melibatkan penggalian detail produk seperti nama, harga, dan ID dari toko online. Python, dengan pustaka serbaguna, membuat tugas ini menjadi efisien dan mudah. Dalam panduan ini, kita akan mengikis informasi produk dari situs web Costco.
Sebelum masuk ke dalam proses scraping, pastikan Anda telah menginstal pustaka Python yang diperlukan:
pip install requests
pip install lxml
Kami akan fokus pada ekstraksi nama produk, fitur produk, dan merek produk dari halaman produk tertentu di situs web.
Untuk mengekstrak data dari situs web apa pun, Anda perlu memahami struktur halaman web. Buka halaman situs web dan periksa elemen yang ingin Anda kikis (misalnya, nama produk, merek fitur, dll).
Pertama, kita akan menggunakan pustaka permintaan untuk mengirim permintaan HTTP GET ke halaman produk. Kita juga akan menyiapkan header permintaan untuk meniru permintaan peramban yang sebenarnya.
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 menggunakan lxml, kita akan mengekstrak titik data yang diperlukan dari HTML yang diuraikan.
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)
Situs web sering kali menerapkan langkah-langkah anti-bot. Menggunakan proksi dan agen pengguna bergilir dapat membantu menghindari deteksi.
Menggunakan proksi 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)
Terakhir, kita akan menyimpan data yang telah dikikis ke file CSV untuk analisis 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}")
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"
]
# tajuk
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}")
# Penyiapan 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}")
Menggunakan Python untuk mengikis dari situs e-commerce seperti Costco adalah metode yang efektif untuk mengumpulkan informasi produk untuk dianalisis serta membuat keputusan strategis. Pemanfaatan pustaka yang tepat, misalnya, Request dan juga Lxml menghasilkan proses ekstraksi otomatis yang dapat menangani konten HTML tanpa melupakan implementasi API anti-bot secara efektif. Perlu dicatat bahwa protokol pengikisan etis harus selalu diikuti.
Komentar: 0