Panduan Cara Mengikis Data Walmart dengan Python

Komentar: 0

Intelijen bisnis, penelitian, dan analisis hanyalah beberapa dari kemungkinan tak terbatas yang tersedia melalui web scraping. Entitas bisnis yang lengkap seperti Walmart menyediakan struktur yang sempurna bagi kita untuk mengumpulkan informasi yang diperlukan. Kami dapat dengan mudah mengikis data Walmart seperti nama, harga, dan info ulasan dari berbagai situs web mereka menggunakan berbagai teknik pengikisan.

Pada artikel ini kita akan membahas proses: cara mengikis data Walmart. Kita akan menggunakan request untuk mengirim permintaan HTTP dan lxml untuk mengurai dokumen HTML yang dikembalikan.

Mengapa Menggunakan Python untuk Mengikis Data Walmart?

Dalam hal penggalian data produk di beberapa situs ritel, Python adalah salah satu opsi paling efektif yang tersedia. Berikut ini adalah cara mengintegrasikannya dengan mulus ke dalam proyek ekstraksi:

  1. Perpustakaan tingkat lanjut. Adanya permintaan untuk interaksi web dan lxml untuk penguraian HTML berarti Anda dapat mengikis katalog online yang luas dengan sangat mudah dan efektif.
  2. Kemudahan penggunaan. Dengan sintaks yang mudah digunakan, pengguna dapat memprogram proses pengambilan data dengan sedikit atau tanpa pengalaman sebelumnya dan dengan demikian, langsung ke bisnis.
  3. Dukungan komunitas. Kerumitan yang ada pada situs web ritel berarti ada banyak sekali sumber daya yang memenuhi syarat dan dukungan dari komunitas untuk membantu Anda menyelesaikan masalah yang muncul.
  4. Menangani data. Analisis Mendalam. Dengan bantuan Pandas untuk menangani data dan Matplotlib untuk representasi visual, Python memungkinkan pengguna untuk menganalisis data dalam skala yang lebih luas, seperti pengumpulan dan analisis.
  5. Manajemen konten dinamis. Dengan Selenium, interaksi dengan elemen-elemen web dinamis menjadi mungkin yang memastikan bahwa pengumpulan data yang luas, bahkan dari halaman yang dimuat dengan JavaScript, dapat dicapai.
  6. Penskalaan yang efektif. Dengan kemampuan untuk mengelola kumpulan data yang sangat besar dan kecil, Python berkinerja sangat baik untuk jangka waktu yang lama, bahkan ketika melakukan aktivitas ekstraksi data yang ekstensif.

Menggunakan bahasa tersebut untuk proyek-proyek di bidang ritel tidak hanya menyederhanakan aspek teknis, tetapi juga meningkatkan efisiensi serta cakupan analisis, menjadikannya pilihan utama bagi para ahli yang ingin mendapatkan pengetahuan mendalam tentang pasar. Aspek-aspek ini mungkin sangat berguna ketika seseorang memutuskan untuk mengikis data Walmart.

Sekarang, mari kita mulai dengan membuat alat scraping web Walmart.

Menyiapkan Lingkungan untuk Mengikis Data Walmart

Untuk memulai, pastikan Python sudah terinstal di komputer Anda. Pustaka yang diperlukan dapat diunduh menggunakan pip:


pip install requests
pip install  lxml
pip install urllib3

Sekarang mari kita mengimpor pustaka seperti:

  • requests - untuk mengambil halaman web melalui HTTP;
  • lxml - untuk pembuatan pohon dokumen HTML;
  • CSV - untuk menulis data yang dikumpulkan ke dalam file CSV;
  • acak - untuk pemilihan string proxy dan agen pengguna.

import requests
from lxml import html
import csv
import random
import urllib3
import ssl

Tentukan URL Produk

Daftar URL produk untuk mengikis data Walmart dapat ditambahkan seperti ini.


product_urls = [
    'link with https',
    'link with https',
    'link with https'
]

String dan Proksi Agen-Pengguna

Ketika mengikis web Walmart, sangat penting untuk menampilkan header HTTP yang benar, terutama header User-Agent, untuk meniru peramban yang sebenarnya. Selain itu, sistem anti-bot situs ini juga bisa diakali dengan menggunakan server proxy yang berputar. Pada contoh di bawah ini, string User-Agent disajikan bersama dengan instruksi untuk menambahkan otorisasi server proxy berdasarkan alamat IP.


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 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36',
    'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36'
]

proxy = [
    '<ip>:<port>',
    '<ip>:<port>',
    '<ip>:<port>',
]

Tajuk untuk Permintaan

Tajuk permintaan harus diatur sedemikian rupa sehingga menyamarkannya sebagai berasal dari peramban pengguna. Ini akan sangat membantu ketika mencoba mengikis data Walmart. Berikut ini contoh tampilannya:


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-IN,en;q=0.9',
    'dnt': '1',
    'priority': 'u=0, i',
    'sec-ch-ua': '"Not/A)Brand";v="8", "Chromium";v="126", "Google Chrome";v="126"',
    'sec-ch-ua-mobile': '?0',
    'sec-ch-ua-platform': '"Linux"',
    'sec-fetch-dest': 'document',
    'sec-fetch-mode': 'navigate',
    'sec-fetch-site': 'none',
    'sec-fetch-user': '?1',
    'upgrade-insecure-requests': '1',
}

Inisialisasi Penyimpanan Data

Langkah utama adalah membuat struktur yang akan menerima informasi produk.


product_details = []

Menghitung halaman URL bekerja dengan cara berikut: Untuk setiap halaman URL, permintaan GET dimulai dengan User-Agent dan proxy yang dipilih secara acak. Setelah respons HTML dikembalikan, respons tersebut diuraikan untuk mendapatkan detail produk termasuk nama, harga, dan ulasan. Detail yang relevan disimpan dalam struktur data kamus yang kemudian ditambahkan ke daftar yang telah dibuat sebelumnya.


for url in product_urls:
   headers['user-agent'] = random.choice(user_agents)
   proxies = {
       'http': f'http://{random.choice(proxy)}',
       'https': f'http://{random.choice(proxy)}',
   }
   try:
       # Kirim permintaan HTTP GET ke URL
       response = requests.get(url=url, headers=headers, proxies=proxies, verify=False)
       print(response.status_code)
       response.raise_for_status()
   except requests.exceptions.RequestException as e:
       print(f'Error fetching data: {e}')

   # Mengurai konten HTML menggunakan lxml
   parser = html.fromstring(response.text)
   # Ekstrak judul produk
   title = ''.join(parser.xpath('//h1[@id="main-title"]/text()'))
   # Ekstrak harga produk
   price = ''.join(parser.xpath('//span[@itemprop="price"]/text()'))
   # Ekstrak detail ulasan
   review_details = ''.join(parser.xpath('//div[@data-testid="reviews-and-ratings"]/div/span[@class="w_iUH7"]/text()'))

   # Menyimpan detail yang diekstrak dalam kamus
   product_detail = {
       'title': title,
       'price': price,
       'review_details': review_details
   }
   # Menambahkan detail produk ke daftar
   product_details.append(product_detail)

Judul:

1.png

Harga:

2.png

Detail ulasan:

3.png

Menyimpan Data ke CSV

  1. Buat file baru dengan menentukan CSV sebagai jenis file dan atur ke mode tulis.
  2. Tentukan nama bidang (kolom) file CSV.
  3. Untuk menulis kamus ke file CSV, buat objek csv.DictWriter.
  4. Tulis baris header file CSV.
  5. Untuk setiap kamus di product_details, ulangi dan tulis kamus sebagai baris dalam file CSV.

with open('walmart_products.csv', 'w', newline='') as csvfile:
    fieldnames = ['title', 'price', 'review_details']
    writer = csv.DictWriter(csvfile, fieldnames=fieldnames)
    writer.writeheader()
    for product_detail in product_details:
        writer.writerow(product_detail)

Kode Lengkap

Ketika melakukan web scraping Walmart, skrip lengkap Python akan terlihat seperti yang disediakan di bawah ini. Berikut ini juga ada beberapa komentar untuk memudahkan Anda memahami setiap bagian.


import requests
from lxml import html
import csv
import random
import urllib3
import ssl

ssl._create_default_https_context = ssl._create_stdlib_context
urllib3.disable_warnings()


# Daftar URL produk untuk mengikis data Walmart
product_urls = [
   'link with https',
   'link with https',
   'link with https'
]

# String Pengguna-Agen yang diacak untuk anonimitas
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 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36',
   'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36'
]

# Daftar proxy untuk rotasi IP
proxy = [
    '<ip>:<port>',
    '<ip>:<port>',
    '<ip>:<port>',
]


# Header untuk meniru permintaan browser
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-IN,en;q=0.9',
   'dnt': '1',
   'priority': 'u=0, i',
   'sec-ch-ua': '"Not/A)Brand";v="8", "Chromium";v="126", "Google Chrome";v="126"',
   'sec-ch-ua-mobile': '?0',
   'sec-ch-ua-platform': '"Linux"',
   'sec-fetch-dest': 'document',
   'sec-fetch-mode': 'navigate',
   'sec-fetch-site': 'none',
   'sec-fetch-user': '?1',
   'upgrade-insecure-requests': '1',
}

# Inisialisasi daftar kosong untuk menyimpan detail produk
product_details = []

# Ulangi setiap URL produk
for url in product_urls:
   headers['user-agent'] = random.choice(user_agents)
   proxies = {
       'http': f'http://{random.choice(proxy)}',
       'https': f'http://{random.choice(proxy)}',
   }
   try:
       # Kirim permintaan HTTP GET ke URL
       response = requests.get(url=url, headers=headers, proxies=proxies, verify=False)
       print(response.status_code)
       response.raise_for_status()
   except requests.exceptions.RequestException as e:
       print(f'Error fetching data: {e}')

   # Mengurai konten HTML menggunakan lxml
   parser = html.fromstring(response.text)
   # Ekstrak judul produk
   title = ''.join(parser.xpath('//h1[@id="main-title"]/text()'))
   # Ekstrak harga produk
   price = ''.join(parser.xpath('//span[@itemprop="price"]/text()'))
   # Ekstrak detail ulasan
   review_details = ''.join(parser.xpath('//div[@data-testid="reviews-and-ratings"]/div/span[@class="w_iUH7"]/text()'))

   # Menyimpan detail yang diekstrak dalam kamus
   product_detail = {
       'title': title,
       'price': price,
       'review_details': review_details
   }
   # Menambahkan detail produk ke daftar
   product_details.append(product_detail)

# Tulis data yang diekstrak ke file CSV
with open('walmart_products.csv', 'w', newline='') as csvfile:
   fieldnames = ['title', 'price', 'review_details']
   writer = csv.DictWriter(csvfile, fieldnames=fieldnames)
   writer.writeheader()
   for product_detail in product_details:
       writer.writerow(product_detail)

Saran Tambahan

Bagi mereka yang menggunakan Python untuk berinteraksi dengan API pengikisan Walmart, sangat penting untuk mengembangkan metode yang kuat yang secara efektif mengikis harga Walmart dan hasil ulasan Walmart. API ini menyediakan saluran langsung ke data produk yang luas, memfasilitasi analisis waktu nyata tentang harga dan umpan balik pelanggan.

Dengan menggunakan strategi khusus ini, ketepatan dan cakupan informasi yang dikumpulkan menjadi lebih baik, sehingga perusahaan dapat beradaptasi dengan cepat terhadap perubahan pasar dan tren konsumen. Melalui penerapan strategis API Walmart di Python, perusahaan dapat mengoptimalkan proses pengumpulan data mereka, memastikan analisis pasar yang komprehensif dan pengambilan keputusan yang tepat.

Kesimpulan

Dalam tutorial ini, kami menjelaskan cara menggunakan pustaka Python untuk mengikis data Walmart dan menyimpannya ke dalam file CSV untuk dianalisis nanti. Skrip yang diberikan bersifat dasar, dan berfungsi sebagai titik awal yang dapat Anda modifikasi untuk meningkatkan efisiensi proses scraping. Perbaikan dapat mencakup menambahkan interval waktu acak antara permintaan untuk mensimulasikan penjelajahan manusia, menggunakan agen pengguna dan proksi untuk menutupi bot, dan menerapkan penanganan kesalahan tingkat lanjut untuk menangani gangguan atau kegagalan pengikisan.


Komentar:

0 komentar