Daftar Isi
Langkah 3: Analisis kode HTML
Mengurai HTML dengan BeautifulSoup memungkinkan kita bekerja dengan struktur data BeautifulSoup yang lebih sederhana dan bertingkat dibandingkan dengan HTML murni, sehingga membuat struktur halaman lebih mudah dinavigasi.
soup = BeautifulSoup(html_response, "lxml")
Namun, sebelum menavigasi pohon yang dianalisis, kita perlu memahami cara menargetkan elemen yang kita inginkan.
Langkah 4: Pahami struktur situs web Macy
Saat mencari kueri target kami, situs web Macy memberikan hasil yang serupa dengan yang ditunjukkan di bawah ini:
Semua di bawah “sweter Natal” dapat diekstraksi, termasuk nama merek, harga, deskripsi, ulasan, gambar, dan tautan produk, seperti yang terlihat pada tangkapan layar beranotasi di bawah.
Sangat penting untuk memahami tata letak HTML suatu halaman. Namun, Anda tidak perlu menjadi ahli HTML berkat Alat Pengembang, sebuah fitur yang tersedia di sebagian besar browser web utama.
Untuk mengakses alat pengembang, Anda dapat mengklik kanan pada halaman web dan memilih “Memeriksa” atau gunakan pintasan “CTRL+SHIFT+I” untuk pengguna Windows atau “Opsi + ⌘ + I” di Mac. Ini akan membuka kode sumber halaman web yang kami targetkan.
Seperti yang terlihat di atas, semua produk dicantumkan sebagai item, jadi kami perlu mengumpulkan semua listingan ini.
Untuk mengikis elemen HTML, kita memerlukan pengenal yang terkait dengannya. Ini bisa menjadi “PENGENAL” dari elemen, nama kelas apa pun, atau atribut HTML lainnya dari elemen tersebut. Dalam kasus kami, kami menggunakan nama kelas sebagai pengenal.
Setelah meninjau halaman hasil pencarian, kami melihat bahwa setiap wadah produk adalah satu div
Elemen dengan kelas productThumbnail
.
Kita bisa mendapatkan elemen HTML ini menggunakan BeautifulSoup
find_all()
Berfungsi untuk menemukan semua instance a div
dengan kelas productThumbnail
.
product_containers = soup.find_all("div", class_="productThumbnail")
Semua ini div
Elemen mewakili wadah produk di situs web.
Kita dapat mengikuti proses yang sama untuk menemukan nama kelas untuk setiap elemen yang ingin kita cari.
Langkah 5: Ekstrak data produk
Untuk mengekstrak data yang diperlukan, kita perlu melakukan iterasi melalui setiap container produk dengan a for
lingkaran dan dengan select_one()
Dan
find()
Fungsi yang mengembalikan elemen pertama yang cocok:
product_data_list = ()
for product_container in product_containers:
# Extract brand
brand_element = product_container.select_one(".productBrand")
brand_name = brand_element.text.strip() if brand_element else None
# Extract price
price_element = product_container.select_one(".prices .regular")
price = price_element.text.strip() if price_element else None
# Extract description
description_element = product_container.select_one(".productDescription .productDescLink")
description = description_element("title").strip() if description_element else None
# Extract rating
rating_element = product_container.select_one(".stars")
rating = rating_element("aria-label") if rating_element else None
# Extract image URL
image_element = product_container.find("img", class_="thumbnailImage")
image_url = image_element("src") if image_element and "src" in image_element.attrs else None```
Setelah mengekstrak data, kami membuat kamus dan menambahkannya ke daftar dengan nama product_data
.
product_data = {
"Product Brand Name": brand_name,
"Price": price,
"Description": description,
"Rating": rating,
"Image URL": image_url,
"Product URL": product_url,
}
# Append the product data to the list
product_data_list.append(product_data)
Itu text.strip()
Fungsi ini mengekstrak konten teks elemen dan menghilangkan spasi di awal atau akhir.
Langkah 6: Tulis hasilnya ke file JSON
Terakhir, kami menyimpan data yang diambil ke file JSON dengan membuka file dalam mode tulis (menggunakan “w
' sebagai argumen kedua open()
) dan dengan json.dump()
Berfungsi untuk menulis daftar data produk ke file:
output_file = "Macy_product_results.json"
with open(output_file, "w", encoding="utf-8") as json_file:
json.dump(product_data_list, json_file, indent=2)
print(f"Scraped data has been saved to {output_file}")
Sebagai masukan, kami menampilkan pesan sukses ke konsol setelah membuat file.
Selamat, Anda baru saja menghapus data produk Macy!
Berikut adalah pratinjau keluaran scraper, seperti yang terlihat di
Macy_product_results.json Mengajukan:
{
"Product Brand Name": "Karen Scott",
"Price": "$49.50",
"Description": "Women's Holiday Sweater, Created for Macy's",
"Rating": "4.4235 out of 5 rating with 1072 reviews",
"Image URL": "https://slimages.macysassets.com/is/image/MCY/products/1/optimized/26374821_fpx.tif?$browse$&wid=224&fmt=jpeg",
"Product URL": "/shop/product/karen-scott-womens-holiday-sweater-created-for-macys?ID=14175633&isDlp=true"
},
{
"Product Brand Name": "Style & Co",
"Price": "$59.50",
"Description": "Women's Holiday Themed Whimsy Sweaters, Regular & Petite, Created for Macy's",
"Rating": "4.2391 out of 5 rating with 46 reviews",
"Image URL": "https://slimages.macysassets.com/is/image/MCY/products/0/optimized/24729680_fpx.tif?$browse$&wid=224&fmt=jpeg",
"Product URL": "/shop/product/style-co-womens-holiday-themed-whimsy-sweaters-regular-petite-created-for-macys?ID=16001406&isDlp=true"
},
{
"Product Brand Name": "Charter Club",
"Price": "$59.50",
"Description": "Holiday Lane Women's Festive Fair Isle Snowflake Sweater, Created for Macy's",
"Rating": "4.8571 out of 5 rating with 7 reviews",
"Image URL": "https://slimages.macysassets.com/is/image/MCY/products/2/optimized/23995392_fpx.tif?$browse$&wid=224&fmt=jpeg",
"Product URL": "/shop/product/holiday-lane-womens-festive-fair-isle-snowflake-sweater-created-for-macys?ID=15889755&isDlp=true"
}, … More JSON Data,
Ringkasan
Dalam tutorial ini kami membahas hal berikut:
- Lewati mekanisme anti-scraping Macy dengan ScraperAPI
- Navigasikan struktur situs web Macy dengan BeautifulSoup
- Ekstrak daftar produk ke file JSON
Saya harap Anda menikmati panduan ini. Anda dipersilakan untuk menggunakan skrip ini dalam proyek Anda. Jika Anda memiliki pertanyaan, silakan hubungi tim dukungan kami. Kami di sini untuk membantu.
Apakah Anda memerlukan lebih dari 3 juta kredit API?
Hubungi tim penjualan kami untuk mengembangkan solusi terbaik untuk proyek Anda.