Rumah > Artikel > pembangunan bahagian belakang > Cara Membina Pengikis Produk untuk Tatal Tatal Tak Terhingga menggunakan Pengikis Web ZenRows
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.
Untuk mengikuti tutorial ini, anda perlu mempunyai yang berikut:
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
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.
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
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.
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
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.
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.
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.
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!