Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Cara Membina Pengikis Produk untuk Tatal Tatal Tak Terhingga menggunakan Pengikis Web ZenRows

Cara Membina Pengikis Produk untuk Tatal Tatal Tak Terhingga menggunakan Pengikis Web ZenRows

Patricia Arquette
Patricia Arquetteasal
2024-11-22 15:17:19737semak imbas

How to Build a Product Scraper for Infinite Scroll Websites using ZenRows Web Scraper

Dalam bidang pengikisan web, mengakses dan mengekstrak data daripada halaman web yang menggunakan penatalan tidak terhingga boleh menjadi cabaran bagi pembangun. Banyak tapak web menggunakan teknik ini untuk memuatkan lebih banyak kandungan secara dinamik, menjadikannya sukar untuk mengikis semua data yang tersedia sekali gus. Penyelesaian yang baik melibatkan simulasi tindakan pengguna, seperti mengklik butang "Muat Lagi" untuk mendedahkan kandungan tambahan.
Tutorial ini akan menyelidiki mengikis data produk daripada halaman dengan skrol tanpa had, menggunakan pengikis web sumber terbuka Zenrows, anda akan membina bot pengikis yang akan mengakses kandungan daripada halaman web dan anda akan menggunakan Zenrows untuk menjana lebih banyak produk pada halaman dengan mengklik butang "Muat Lagi", untuk mensimulasikan penatalan yang tidak terhingga.

Prasyarat

Untuk mengikuti tutorial ini, anda perlu mempunyai yang berikut:

  • Python: Anda sepatutnya menyediakan Python pada mesin anda. Jika tidak, anda boleh memasangnya di sini.
  • Asas Mengikis Web: Anda seharusnya mempunyai pemahaman yang kukuh tentang cara pengikisan web berfungsi.
  • ZenRows SDK: Anda akan menggunakan perkhidmatan ZenRows untuk memintas langkah anti-mengikis dan memudahkan mengikis kandungan dinamik. Anda boleh mendaftar untuk akaun ZenRows percuma di sini.

Mendapatkan Akses kepada Kandungan

Setelah anda mendaftar untuk akaun Zenrows anda dan anda mempunyai prasyarat, langkah seterusnya ialah mengakses kandungan dari halaman web; untuk tutorial ini, anda akan menggunakan halaman ini https://www.scrapingcourse.com/button-click.

Anda juga akan menggunakan ZenRows SDK untuk mengikis halaman dinamik dan mengendalikan pelbagai rendering dan langkah anti-bot. Mari mulakan anda:

Pasang Pustaka yang diperlukan:
Buka terminal IDE pilihan anda dan jalankan kod untuk memasang ZenRows Python SDK.

pip install zenrows python-dotenv

Menyediakan API anda

Pergi ke papan pemuka anda dan salin Kunci API di penjuru kanan sebelah atas skrin anda seperti dalam imej di bawah.

Seterusnya, buat halaman app.py dan .env, kemudian tambahkan kod di bawah pada fail app.py anda. Dan tambahkan kunci API anda pada API_KEY pembolehubah dalam fail .env anda.

# Import ZenRows SDK
from zenrows import ZenRowsClient
from dotenv import load_dotenv
import os

# Load environment variables
load_dotenv()

# Initialize ZenRows client with your API key
client = ZenRowsClient(os.getenv("API_KEY"))

# URL of the page you want to scrape
url = "https://www.scrapingcourse.com/button-click"

# Set up initial parameters for JavaScript rendering and interaction
base_params = {
    "js_render": "true",
    "json_response": "true",
    "premium_proxy": "true",
    "markdown_response": "true"
}

Kod di atas memulakan Zenrow SDK menggunakan kunci API anda. Ia menyediakan pembolehubah URL untuk halaman web yang anda akan mengikis dan menetapkan pembolehubah base_params untuk parameter yang diperlukan. Anda boleh melaksanakan pengikis menggunakan arahan:

python app.py

Ini akan memberikan anda perwakilan HTML halaman yang mengandungi hanya produk pada halaman semasa.
.

Anda sentiasa boleh mengambil langkah ini lebih jauh.

Memuatkan Lebih Banyak Produk

Untuk meningkatkan pengikis anda, anda boleh melaksanakan parameter tambahan untuk berinteraksi dengan butang "Muat Lagi" di bahagian bawah halaman web dan memuatkan lebih banyak produk.

Mulakan dengan mengubah suai import anda untuk memasukkan pakej yang diperlukan dan menambah fungsi parse_products yang menapis tindak balas produk:

pip install zenrows python-dotenv

Seterusnya, buat gelung sementara untuk terus mengikis maklumat produk daripada berbilang halaman sehingga had yang ditentukan (max_products). Tetapkan had kepada 50 untuk tutorial ini:

# Import ZenRows SDK
from zenrows import ZenRowsClient
from dotenv import load_dotenv
import os

# Load environment variables
load_dotenv()

# Initialize ZenRows client with your API key
client = ZenRowsClient(os.getenv("API_KEY"))

# URL of the page you want to scrape
url = "https://www.scrapingcourse.com/button-click"

# Set up initial parameters for JavaScript rendering and interaction
base_params = {
    "js_render": "true",
    "json_response": "true",
    "premium_proxy": "true",
    "markdown_response": "true"
}

Gelung ini akan terus membuang produk dengan mensimulasikan klik butang "Muat Lagi" sehingga had yang ditentukan dicapai.
Menghuraikan Maklumat Produk
Akhir sekali, anda boleh menghuraikan maklumat produk yang anda kikis dalam langkah sebelumnya. Untuk setiap produk, ekstrak nama produk, pautan imej, harga dan URL halaman produk. Anda juga boleh mengira jumlah harga semua produk dan mencetak hasilnya seperti berikut:

python app.py

Menghuraikan Ke dalam fail CSV

Jika anda lebih suka menghuraikan respons anda ke dalam fail csv yang dieksport, dalam beberapa langkah seterusnya, anda akan mengambil maklumat produk yang telah anda kikis dan mempelajari cara mengeksportnya ke fail CSV.

Mengubah suai Skrip untuk Menyimpan Data

Pertama, anda perlu menggunakan modul CSV terbina dalam Python untuk menyimpan data produk. Dalam kes ini, setiap produk mempunyai empat atribut utama: nama, pautan_imej, harga dan url_produk.

Anda boleh menggunakannya sebagai pengepala untuk CSV anda, mengulangi senarai produk yang dikikis dan kemudian menulis setiap produk sebagai baris dalam fail CSV.

import re
import json
import time

def parse_products(response_json):
    try:
        data = json.loads(response_json)
        md_content = data.get('md', '')
        pattern = r'\[!\[([^\]]+)\]\(([^\)]+)\)\*\n([^\\n]+)\*\n\*\n$(\d+)\]\(([^\)]+)\)'
        matches = re.findall(pattern, md_content)

        products = []
        for match in matches:
            product = {
                'name': match[0],
                'image_link': match[1],
                'price': int(match[3]),
                'product_url': match[4]
            }
            products.append(product)

        return products
    except json.JSONDecodeError:
        print("Error: Unable to parse JSON response")
        print("Response content:", response_json[:500])
        return []
    except Exception as e:
        print(f"Error parsing products: {str(e)}")
        return []

# Zenrow SDK code here

Sekarang, selepas mengikis data, cuma panggil fungsi save_to_csv(all_products) untuk menyimpan data dalam fail CSV bernama products.csv.

Jalankan arahan untuk menyimpan data secara automatik ke fail CSV setelah proses mengikis selesai.

# Zenrow SDK code goes here

max_products = 50
all_products = []
page = 1

while len(all_products) < max_products:
    print(f"Scraping page {page}...")

    # Update parameters for each request
    params = base_params.copy()
    js_instructions = [{"click": "#load-more-btn"} for _ in range(page)]
    js_instructions.append({"wait": 5000})
    params["js_instructions"] = json.dumps(js_instructions)

    try:
        # Send the GET request to ZenRows
        response = client.get(url, params=params)

        # Parse the response JSON
        new_products = parse_products(response.text)

        if not new_products:
            print("No more products found. Stopping.")
            break

        all_products.extend(new_products)
        print(f"Found {len(new_products)} products on this page.")
        print(f"Total products so far: {len(all_products)}")

        page += 1

        # Add a delay to avoid overwhelming the server
        time.sleep(2)

    except Exception as e:
        print(f"Error occurred: {str(e)}")
        break

Mengenalpasti 5 Produk Harga Tertinggi

Sekarang anda mempunyai semua produk dalam format berstruktur, anda boleh melangkah lebih jauh dan mengenal pasti 5 produk berharga tertinggi, dan anda perlu melawati setiap halaman produk untuk mengeluarkan butiran tambahan seperti penerangan produk dan SKU kod.

Isih Produk mengikut Harga: Menggunakan fungsi sorted() Python, anda boleh mengisih senarai produk mengikut harga dalam tertib menurun dan mendapatkan semula 5 produk teratas.

Anda perlu melawati setiap halaman menggunakan fungsi requests.get() untuk mengambil data produk bagi setiap halaman tersebut. Daripada respons, anda boleh mengekstrak penerangan produk dan kod SKU.
Anda juga boleh mengemas kini csv fly dari langkah terakhir untuk memasukkan butiran tambahan.

Berikut ialah kod untuk mencapainya:

# Updated Params and while loop code goes here
# Calculate the total price of all products
total_sum = sum(product['price'] for product in all_products)

print("\nAll products:")
for product in all_products:
    print(product)

# Print the total sum of the product prices
print(f"\nTotal number of products: {len(all_products)}")
print(f"Total sum of product prices: ${total_sum}")

Kini, selepas mengikis, anda kini boleh mengenal pasti produk dengan harga tertinggi:

pip install zenrows python-dotenv

Selepas mendapatkan maklumat tambahan, anda boleh mengubah suai fail CSV atau membuat fail baharu dengan butiran ini disertakan.

Kod Lengkap

Beginilah rupa fail app.py lengkap anda.

# Import ZenRows SDK
from zenrows import ZenRowsClient
from dotenv import load_dotenv
import os

# Load environment variables
load_dotenv()

# Initialize ZenRows client with your API key
client = ZenRowsClient(os.getenv("API_KEY"))

# URL of the page you want to scrape
url = "https://www.scrapingcourse.com/button-click"

# Set up initial parameters for JavaScript rendering and interaction
base_params = {
    "js_render": "true",
    "json_response": "true",
    "premium_proxy": "true",
    "markdown_response": "true"
}

Beginilah rupa tindak balas yang berjaya.

python app.py

Lihat pangkalan kod lengkap di GitHub.

Kesimpulan

Dalam tutorial ini, anda mempelajari cara mengikis produk daripada halaman web dengan tatal tanpa had menggunakan butang "Muat Lagi". Dengan mengikut langkah yang digariskan, anda boleh mengekstrak maklumat produk yang berharga dan meningkatkan teknik mengikis anda menggunakan ZenRows.
Untuk mengetahui lebih lanjut tentang cara anda boleh menggunakan alat mengikis web Zenrow, lihat artikel berikut di blog kami.

  • Cara menghuraikan HTML dengan PHP
  • Cara menggunakan Hrequests untuk Mengikis Web
  • Cara menggunakan pengarang drama dalam Ruby Berikut ialah video ringkas tentang pendekatan tanpa kod untuk menggunakan alat mengikis Web Zenrows.

Atas ialah kandungan terperinci Cara Membina Pengikis Produk untuk Tatal Tatal Tak Terhingga menggunakan Pengikis Web ZenRows. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn