pengenalan
Target.com ialah salah satu pasaran e-dagang dan beli-belah terbesar di Amerika. Ia membolehkan pengguna membeli-belah dalam talian dan dalam kedai untuk segala-galanya daripada barangan runcit dan keperluan kepada pakaian dan elektronik. Mulai September 2024, menurut data daripada SimilarWeb, Target.com menarik trafik web bulanan lebih daripada 166 juta.
Tapak web Target.com menawarkan ulasan pelanggan, maklumat harga dinamik, perbandingan produk dan penilaian produk, antara lain. Ia merupakan sumber data yang berharga untuk penganalisis, pasukan pemasaran, perniagaan atau penyelidik yang ingin menjejaki arah aliran produk, memantau harga pesaing atau menganalisis sentimen pelanggan melalui ulasan.
Dalam artikel ini, anda akan belajar cara:
- Sediakan dan pasang Python, Selenium dan Sup Cantik untuk mengikis web
- Scrape ulasan dan penilaian produk daripada Target.com menggunakan Python
- Gunakan ScraperAPI untuk memintas mekanisme anti-mengikis Target.com dengan berkesan
- Laksanakan proksi untuk mengelakkan larangan IP dan meningkatkan prestasi mengikis
Menjelang akhir artikel ini, anda akan belajar cara mengumpulkan ulasan dan penilaian produk daripada Target.com menggunakan Python, Selenium dan ScraperAPI tanpa disekat. Anda juga akan belajar cara menggunakan data anda yang dikikis untuk analisis sentimen.
Jika anda teruja semasa saya menulis tutorial ini, mari selami terus. ?
TL;DR: Mengikis Ulasan Produk Sasaran [Kod Penuh]
Bagi mereka yang tergesa-gesa, berikut ialah coretan kod lengkap yang akan kami bina berdasarkan tutorial ini:
import os import time from bs4 import BeautifulSoup from dotenv import load_dotenv from selenium.common.exceptions import NoSuchElementException, TimeoutException from selenium.webdriver.chrome.options import Options from selenium.webdriver.chrome.service import Service as ChromeService from selenium.webdriver.common.by import By from selenium.webdriver.support import expected_conditions as EC from selenium.webdriver.support.ui import WebDriverWait from seleniumwire import webdriver from webdriver_manager.chrome import ChromeDriverManager # Load environment variables load_dotenv() def target_com_scraper(): """ SCRAPER SETTINGS - API_KEY: Your ScraperAPI key. Get your API Key ==> https://www.scraperapi.com/?fp_ref=eunit """ API_KEY = os.getenv("API_KEY", "yourapikey") # ScraperAPI proxy settings (with HTTP and HTTPS variants) scraper_api_proxies = { 'proxy': { 'http': f'http://scraperapi:{API_KEY}@proxy-server.scraperapi.com:8001', 'https': f'http://scraperapi:{API_KEY}@proxy-server.scraperapi.com:8001', 'no_proxy': 'localhost,127.0.0.1' } } # URLs to scrape url_list = [ "https://www.target.com/p/enclosed-cat-litter-box-xl-up-up/-/A-90310047?preselect=87059440#lnk=sametab", ] # Store scraped data scraped_data = [] # Setup Selenium options with proxy options = Options() # options.add_argument("--headless") # Uncomment for headless mode options.add_argument("--no-sandbox") options.add_argument("--disable-dev-shm-usage") options.add_argument("--disable-extensions") options.add_argument("--disable-in-process-stack-traces") options.add_argument("--window-size=1920,1080") options.add_argument("--log-level=3") options.add_argument("--disable-logging") options.add_argument("--start-maximized") # Initialize Selenium WebDriver driver = webdriver.Chrome(service=ChromeService( ChromeDriverManager().install()), options=options, seleniumwire_options=scraper_api_proxies) def scroll_down_page(distance=100, delay=0.2): """ Scroll down the page gradually until the end. Args: - distance: Number of pixels to scroll by in each step. - delay: Time (in seconds) to wait between scrolls. """ total_height = driver.execute_script( "return document.body.scrollHeight") scrolled_height = 0 while scrolled_height div") for review in reviews_list: # Create a dictionary to store each review's data ratings = {} # Extract title title_element = review.select_one( "h4[data-test='review-card--title']") ratings['title'] = title_element.text.strip( ) if title_element else None # Extract rating rating_element = review.select_one("span[data-test='ratings']") ratings['rating'] = rating_element.text.strip( ) if rating_element else None # Extract time time_element = review.select_one( "span[data-test='review-card--reviewTime']") ratings['time'] = time_element.text.strip( ) if time_element else None # Extract review text text_element = review.select_one( "div[data-test='review-card--text']") ratings['text'] = text_element.text.strip( ) if text_element else None # Append each review to the list of reviews scraped_reviews.append(ratings) # Append the list of reviews to the main product data reviews_data["reviews"] = scraped_reviews # Append the overall data to the scraped_data list scraped_data.append(reviews_data) # Output the scraped data print(f"Scraped data: {scraped_data}") except Exception as e: print(f"Error: {e}") finally: # Ensure driver quits after scraping driver.quit() if __name__ == "__main__": target_com_scraper()
Lihat kod lengkap di GitHub: https://github.com/Eunit99/target_com_scraper. Ingin memahami setiap baris kod? Mari kita bina pengikis web dari awal bersama-sama!
Cara Mengikis Ulasan Target.com dengan Python dan ScraperAPI
Dalam artikel terdahulu, kami membincangkan semua yang anda perlu ketahui untuk mengikis data produk Target.com. Walau bagaimanapun, dalam artikel ini, saya akan menumpukan pada memandu anda melalui cara mengikis Target.com untuk penilaian dan ulasan produk dengan Python dan ScraperAPI.
Prasyarat
Untuk mengikuti tutorial ini dan mula mengikis Target.com, anda perlu melakukan beberapa perkara dahulu.
1. Mempunyai Akaun dengan ScraperAPI
Mulakan dengan akaun percuma di ScraperAPI. ScraperAPI membolehkan anda mula mengumpul data daripada berjuta-juta sumber web tanpa penyelesaian yang rumit dan mahal dengan API kami yang mudah digunakan untuk mengikis web.
ScraperAPI membuka kunci walaupun tapak yang paling sukar, mengurangkan kos infrastruktur dan pembangunan, membolehkan anda menggunakan pengikis web dengan lebih pantas, dan juga memberi anda 1,000 kredit API percuma untuk mencuba sesuatu dahulu dan banyak lagi.
2. Editor Teks atau IDE
Gunakan editor kod seperti Visual Studio Code. Pilihan lain termasuk Teks Sublime atau PyCharm.
3. Keperluan Projek dan Persediaan Persekitaran Maya
Sebelum bermula dengan mengikis ulasan Target.com, pastikan anda mempunyai perkara berikut:
- Python dipasang pada mesin anda (versi 3.10 atau lebih baharu)
- pip (pemasang pakej Python)
Adalah amalan terbaik untuk menggunakan persekitaran maya untuk projek Python untuk mengurus kebergantungan dan mengelakkan konflik.
Untuk mencipta persekitaran maya, jalankan arahan ini dalam terminal anda:
import os import time from bs4 import BeautifulSoup from dotenv import load_dotenv from selenium.common.exceptions import NoSuchElementException, TimeoutException from selenium.webdriver.chrome.options import Options from selenium.webdriver.chrome.service import Service as ChromeService from selenium.webdriver.common.by import By from selenium.webdriver.support import expected_conditions as EC from selenium.webdriver.support.ui import WebDriverWait from seleniumwire import webdriver from webdriver_manager.chrome import ChromeDriverManager # Load environment variables load_dotenv() def target_com_scraper(): """ SCRAPER SETTINGS - API_KEY: Your ScraperAPI key. Get your API Key ==> https://www.scraperapi.com/?fp_ref=eunit """ API_KEY = os.getenv("API_KEY", "yourapikey") # ScraperAPI proxy settings (with HTTP and HTTPS variants) scraper_api_proxies = { 'proxy': { 'http': f'http://scraperapi:{API_KEY}@proxy-server.scraperapi.com:8001', 'https': f'http://scraperapi:{API_KEY}@proxy-server.scraperapi.com:8001', 'no_proxy': 'localhost,127.0.0.1' } } # URLs to scrape url_list = [ "https://www.target.com/p/enclosed-cat-litter-box-xl-up-up/-/A-90310047?preselect=87059440#lnk=sametab", ] # Store scraped data scraped_data = [] # Setup Selenium options with proxy options = Options() # options.add_argument("--headless") # Uncomment for headless mode options.add_argument("--no-sandbox") options.add_argument("--disable-dev-shm-usage") options.add_argument("--disable-extensions") options.add_argument("--disable-in-process-stack-traces") options.add_argument("--window-size=1920,1080") options.add_argument("--log-level=3") options.add_argument("--disable-logging") options.add_argument("--start-maximized") # Initialize Selenium WebDriver driver = webdriver.Chrome(service=ChromeService( ChromeDriverManager().install()), options=options, seleniumwire_options=scraper_api_proxies) def scroll_down_page(distance=100, delay=0.2): """ Scroll down the page gradually until the end. Args: - distance: Number of pixels to scroll by in each step. - delay: Time (in seconds) to wait between scrolls. """ total_height = driver.execute_script( "return document.body.scrollHeight") scrolled_height = 0 while scrolled_height div") for review in reviews_list: # Create a dictionary to store each review's data ratings = {} # Extract title title_element = review.select_one( "h4[data-test='review-card--title']") ratings['title'] = title_element.text.strip( ) if title_element else None # Extract rating rating_element = review.select_one("span[data-test='ratings']") ratings['rating'] = rating_element.text.strip( ) if rating_element else None # Extract time time_element = review.select_one( "span[data-test='review-card--reviewTime']") ratings['time'] = time_element.text.strip( ) if time_element else None # Extract review text text_element = review.select_one( "div[data-test='review-card--text']") ratings['text'] = text_element.text.strip( ) if text_element else None # Append each review to the list of reviews scraped_reviews.append(ratings) # Append the list of reviews to the main product data reviews_data["reviews"] = scraped_reviews # Append the overall data to the scraped_data list scraped_data.append(reviews_data) # Output the scraped data print(f"Scraped data: {scraped_data}") except Exception as e: print(f"Error: {e}") finally: # Ensure driver quits after scraping driver.quit() if __name__ == "__main__": target_com_scraper()
4. Mengaktifkan Persekitaran Maya
Aktifkan persekitaran maya berdasarkan sistem pengendalian anda:
python3 -m venv env
Sesetengah IDE boleh mengaktifkan persekitaran maya secara automatik.
5. Mempunyai pemahaman asas tentang pemilih CSS dan Navigasi Browser DevTools
Untuk mengikuti artikel ini dengan berkesan, anda perlu mempunyai pemahaman asas tentang pemilih CSS. Pemilih CSS digunakan untuk menyasarkan elemen HTML tertentu pada halaman web, yang membolehkan anda mengekstrak maklumat yang anda perlukan.
Selain itu, selesa dengan penyemak imbas DevTools adalah penting untuk memeriksa dan mengenal pasti struktur halaman web.
Persediaan Projek
Setelah memenuhi prasyarat di atas, tiba masanya untuk menyediakan projek anda. Mulakan dengan mencipta folder yang akan mengandungi kod sumber pengikis Target.com. Dalam kes ini, saya akan menamakan folder python-target-dot-com-scraper saya.
Jalankan arahan berikut untuk mencipta folder bernama python-target-dot-com-scraper:
# On Unix or MacOS (bash shell): /path/to/venv/bin/activate # On Unix or MacOS (csh shell): /path/to/venv/bin/activate.csh # On Unix or MacOS (fish shell): /path/to/venv/bin/activate.fish # On Windows (command prompt): \path\to\venv\Scripts\activate.bat # On Windows (PowerShell): \path\to\venv\Scripts\Activate.ps1
Masukkan folder dan buat fail Python main.py baharu dengan menjalankan arahan ini:
mkdir python-target-dot-com-scraper
Buat fail requirements.txt dengan menjalankan arahan berikut:
cd python-target-dot-com-scraper && touch main.py
Untuk artikel ini, saya akan menggunakan Selenium dan Sup Cantik, dan Pengurus Webdriver untuk perpustakaan Python untuk membina pengikis web. Selenium akan mengendalikan automasi penyemak imbas, dan perpustakaan Beautiful Soup akan mengekstrak data daripada kandungan HTML tapak web Target.com. Pada masa yang sama, Pengurus Webdriver untuk Python menyediakan cara untuk mengurus pemacu untuk penyemak imbas yang berbeza secara automatik.
Tambah baris berikut pada fail requirements.txt anda untuk menentukan pakej yang diperlukan:
touch requirements.txt
Untuk memasang pakej, jalankan arahan berikut:
selenium~=4.25.0 bs4~=0.0.2 python-dotenv~=1.0.1 webdriver_manager selenium-wire blinker==1.7.0 python-dotenv==1.0.1
Ekstrak Ulasan Produk Target.com dengan Selenium
Dalam bahagian ini, saya akan membimbing anda melalui panduan langkah demi langkah untuk mendapatkan penilaian dan ulasan produk daripada halaman produk seperti ini daripada Target.com.
Saya akan menumpukan pada ulasan dan penilaian daripada bahagian tapak web ini yang diserlahkan dalam tangkapan skrin ini di bawah:
Sebelum mendalami lebih lanjut, anda perlu memahami struktur HTML dan mengenal pasti pemilih DOM yang dikaitkan dengan tag HTML yang membungkus maklumat yang ingin kami ekstrak. Dalam bahagian seterusnya ini, saya akan membimbing anda menggunakan Chrome DevTools untuk memahami struktur tapak Target.com.
Menggunakan Chrome DevTools untuk Memahami Struktur Tapak Target.com
Buka Chrome DevTools dengan menekan F12 atau mengklik kanan di mana-mana pada halaman dan memilih Inspect. Memeriksa halaman daripada URL di atas mendedahkan perkara berikut:
Daripada gambar di atas, berikut adalah semua pemilih DOM yang akan disasarkan oleh pengikis web untuk mengekstrak maklumat:
Information | DOM selector | Value |
---|---|---|
Product ratings | ||
Rating value | div[data-test='rating-value'] | 4.7 |
Rating count | div[data-test='rating-count'] | 683 star ratings |
Secondary rating | div[data-test='secondary-rating'] | 683 star ratings |
Rating histogram | div[data-test='rating-histogram'] | 5 stars 85%4 stars 8%3 stars 3%2 stars 1%1 star 2% |
Percent recommended | div[data-test='percent-recommended'] | 89% would recommend |
Total recommendations | div[data-test='total-recommendations'] | 125 recommendations |
Product reviews | ||
Reviews list | div[data-test='reviews-list'] | Returns children elements corresponding to individual product review |
Review card title | h4[data-test='review-card--title'] | Perfect litter box for cats |
Ratings | span[data-test='ratings'] | 4.7 out of 5 stars with 683 reviews |
Review time | span[data-test='review-card--reviewTime'] | 23 days ago |
Review card text | div[data-test='review-card--text'] | My cats love it. Doesn't take up much space either |
Membina Pengikis Ulasan Sasaran Anda
Sekarang kami telah menggariskan semua keperluan dan telah menemui elemen berbeza yang kami minati di halaman semakan produk Target.com. Kami akan beralih ke langkah seterusnya yang memerlukan pengimportan modul yang diperlukan:
1. Mengimport Selenium dan Modul Lain
import os import time from bs4 import BeautifulSoup from dotenv import load_dotenv from selenium.common.exceptions import NoSuchElementException, TimeoutException from selenium.webdriver.chrome.options import Options from selenium.webdriver.chrome.service import Service as ChromeService from selenium.webdriver.common.by import By from selenium.webdriver.support import expected_conditions as EC from selenium.webdriver.support.ui import WebDriverWait from seleniumwire import webdriver from webdriver_manager.chrome import ChromeDriverManager # Load environment variables load_dotenv() def target_com_scraper(): """ SCRAPER SETTINGS - API_KEY: Your ScraperAPI key. Get your API Key ==> https://www.scraperapi.com/?fp_ref=eunit """ API_KEY = os.getenv("API_KEY", "yourapikey") # ScraperAPI proxy settings (with HTTP and HTTPS variants) scraper_api_proxies = { 'proxy': { 'http': f'http://scraperapi:{API_KEY}@proxy-server.scraperapi.com:8001', 'https': f'http://scraperapi:{API_KEY}@proxy-server.scraperapi.com:8001', 'no_proxy': 'localhost,127.0.0.1' } } # URLs to scrape url_list = [ "https://www.target.com/p/enclosed-cat-litter-box-xl-up-up/-/A-90310047?preselect=87059440#lnk=sametab", ] # Store scraped data scraped_data = [] # Setup Selenium options with proxy options = Options() # options.add_argument("--headless") # Uncomment for headless mode options.add_argument("--no-sandbox") options.add_argument("--disable-dev-shm-usage") options.add_argument("--disable-extensions") options.add_argument("--disable-in-process-stack-traces") options.add_argument("--window-size=1920,1080") options.add_argument("--log-level=3") options.add_argument("--disable-logging") options.add_argument("--start-maximized") # Initialize Selenium WebDriver driver = webdriver.Chrome(service=ChromeService( ChromeDriverManager().install()), options=options, seleniumwire_options=scraper_api_proxies) def scroll_down_page(distance=100, delay=0.2): """ Scroll down the page gradually until the end. Args: - distance: Number of pixels to scroll by in each step. - delay: Time (in seconds) to wait between scrolls. """ total_height = driver.execute_script( "return document.body.scrollHeight") scrolled_height = 0 while scrolled_height div") for review in reviews_list: # Create a dictionary to store each review's data ratings = {} # Extract title title_element = review.select_one( "h4[data-test='review-card--title']") ratings['title'] = title_element.text.strip( ) if title_element else None # Extract rating rating_element = review.select_one("span[data-test='ratings']") ratings['rating'] = rating_element.text.strip( ) if rating_element else None # Extract time time_element = review.select_one( "span[data-test='review-card--reviewTime']") ratings['time'] = time_element.text.strip( ) if time_element else None # Extract review text text_element = review.select_one( "div[data-test='review-card--text']") ratings['text'] = text_element.text.strip( ) if text_element else None # Append each review to the list of reviews scraped_reviews.append(ratings) # Append the list of reviews to the main product data reviews_data["reviews"] = scraped_reviews # Append the overall data to the scraped_data list scraped_data.append(reviews_data) # Output the scraped data print(f"Scraped data: {scraped_data}") except Exception as e: print(f"Error: {e}") finally: # Ensure driver quits after scraping driver.quit() if __name__ == "__main__": target_com_scraper()
Dalam kod ini, setiap modul mempunyai tujuan khusus untuk membina pengikis web kami:
- os mengendalikan pembolehubah persekitaran seperti kunci API.
- masa memperkenalkan kelewatan semasa memuatkan halaman.
- dotenv memuatkan kunci API daripada fail .env.
- selenium membolehkan automasi dan interaksi penyemak imbas.
- webdriver_manager memasang ChromeDriver secara automatik.
- BeautifulSoup menghuraikan HTML untuk pengekstrakan data.
- seleniumwire menguruskan proksi untuk mengikis tanpa larangan IP.
2. Menyediakan Pemacu Web
Dalam langkah ini, anda akan memulakan Pemacu Web Chrome Selenium dan mengkonfigurasi pilihan penyemak imbas yang penting. Pilihan ini termasuk melumpuhkan ciri yang tidak diperlukan untuk meningkatkan prestasi, menetapkan saiz tetingkap dan mengurus log. Anda akan membuat instantiate WebDriver menggunakan webdriver.Chrome() untuk mengawal penyemak imbas sepanjang proses mengikis.
python3 -m venv env
Buat Fungsi Tatal ke bawah
Dalam bahagian ini, kami mencipta fungsi untuk menatal seluruh halaman. Tapak web Target.com memuatkan kandungan tambahan (seperti ulasan) secara dinamik apabila pengguna menatal ke bawah.
# On Unix or MacOS (bash shell): /path/to/venv/bin/activate # On Unix or MacOS (csh shell): /path/to/venv/bin/activate.csh # On Unix or MacOS (fish shell): /path/to/venv/bin/activate.fish # On Windows (command prompt): \path\to\venv\Scripts\activate.bat # On Windows (PowerShell): \path\to\venv\Scripts\Activate.ps1
Fungsi scroll_down_page() menatal halaman web secara beransur-ansur mengikut bilangan piksel (jarak) yang ditetapkan dengan jeda singkat (kelewatan) antara setiap skrol. Ia mula-mula mengira jumlah ketinggian halaman dan tatal ke bawah sehingga mencapai bahagian bawah. Semasa ia menatal, jumlah ketinggian halaman dikemas kini secara dinamik untuk menampung kandungan baharu yang mungkin dimuatkan semasa proses.
Menggabungkan Selenium dengan BeautifulSoup
Dalam bahagian ini, kami menggabungkan kekuatan Selenium dan BeautifulSoup untuk mencipta persediaan mengikis web yang cekap dan boleh dipercayai. Walaupun Selenium digunakan untuk berinteraksi dengan kandungan dinamik seperti memuatkan halaman dan mengendalikan elemen yang diberikan JavaScript, BeautifulSoup lebih berkesan untuk menghuraikan dan mengekstrak elemen HTML statik. Kami mula-mula menggunakan Selenium untuk menavigasi halaman web dan menunggu elemen tertentu, seperti penilaian produk dan kiraan ulasan, dimuatkan. Elemen ini diekstrak dengan fungsi WebDriverWait Selenium, yang memastikan data kelihatan sebelum menangkapnya. Walau bagaimanapun, pengendalian ulasan individu melalui Selenium sahaja boleh menjadi rumit dan tidak cekap.
Menggunakan BeautifulSoup, kami memudahkan proses penggulungan melalui berbilang ulasan pada halaman. Setelah Selenium memuatkan halaman sepenuhnya, BeautifulSoup menghuraikan kandungan HTML untuk mengekstrak ulasan dengan cekap. Menggunakan kaedah select() dan select_one() BeautifulSoup, kami boleh menavigasi struktur halaman dan mengumpulkan tajuk, penilaian, masa dan teks untuk setiap ulasan. Pendekatan ini membolehkan pengikisan elemen berulang yang lebih bersih dan lebih berstruktur (seperti senarai ulasan) dan menawarkan fleksibiliti yang lebih besar dalam mengendalikan HTML, berbanding mengurus segala-galanya melalui Selenium sahaja.
import os import time from bs4 import BeautifulSoup from dotenv import load_dotenv from selenium.common.exceptions import NoSuchElementException, TimeoutException from selenium.webdriver.chrome.options import Options from selenium.webdriver.chrome.service import Service as ChromeService from selenium.webdriver.common.by import By from selenium.webdriver.support import expected_conditions as EC from selenium.webdriver.support.ui import WebDriverWait from seleniumwire import webdriver from webdriver_manager.chrome import ChromeDriverManager # Load environment variables load_dotenv() def target_com_scraper(): """ SCRAPER SETTINGS - API_KEY: Your ScraperAPI key. Get your API Key ==> https://www.scraperapi.com/?fp_ref=eunit """ API_KEY = os.getenv("API_KEY", "yourapikey") # ScraperAPI proxy settings (with HTTP and HTTPS variants) scraper_api_proxies = { 'proxy': { 'http': f'http://scraperapi:{API_KEY}@proxy-server.scraperapi.com:8001', 'https': f'http://scraperapi:{API_KEY}@proxy-server.scraperapi.com:8001', 'no_proxy': 'localhost,127.0.0.1' } } # URLs to scrape url_list = [ "https://www.target.com/p/enclosed-cat-litter-box-xl-up-up/-/A-90310047?preselect=87059440#lnk=sametab", ] # Store scraped data scraped_data = [] # Setup Selenium options with proxy options = Options() # options.add_argument("--headless") # Uncomment for headless mode options.add_argument("--no-sandbox") options.add_argument("--disable-dev-shm-usage") options.add_argument("--disable-extensions") options.add_argument("--disable-in-process-stack-traces") options.add_argument("--window-size=1920,1080") options.add_argument("--log-level=3") options.add_argument("--disable-logging") options.add_argument("--start-maximized") # Initialize Selenium WebDriver driver = webdriver.Chrome(service=ChromeService( ChromeDriverManager().install()), options=options, seleniumwire_options=scraper_api_proxies) def scroll_down_page(distance=100, delay=0.2): """ Scroll down the page gradually until the end. Args: - distance: Number of pixels to scroll by in each step. - delay: Time (in seconds) to wait between scrolls. """ total_height = driver.execute_script( "return document.body.scrollHeight") scrolled_height = 0 while scrolled_height div") for review in reviews_list: # Create a dictionary to store each review's data ratings = {} # Extract title title_element = review.select_one( "h4[data-test='review-card--title']") ratings['title'] = title_element.text.strip( ) if title_element else None # Extract rating rating_element = review.select_one("span[data-test='ratings']") ratings['rating'] = rating_element.text.strip( ) if rating_element else None # Extract time time_element = review.select_one( "span[data-test='review-card--reviewTime']") ratings['time'] = time_element.text.strip( ) if time_element else None # Extract review text text_element = review.select_one( "div[data-test='review-card--text']") ratings['text'] = text_element.text.strip( ) if text_element else None # Append each review to the list of reviews scraped_reviews.append(ratings) # Append the list of reviews to the main product data reviews_data["reviews"] = scraped_reviews # Append the overall data to the scraped_data list scraped_data.append(reviews_data) # Output the scraped data print(f"Scraped data: {scraped_data}") except Exception as e: print(f"Error: {e}") finally: # Ensure driver quits after scraping driver.quit() if __name__ == "__main__": target_com_scraper()
Menggunakan Proksi dalam Python Selenium: Interaksi Kompleks dengan Pelayar Tanpa Kepala
Apabila mengikis tapak web yang kompleks, terutamanya yang mempunyai langkah anti-bot yang teguh seperti Target.com, cabaran seperti larangan IP, had kadar atau sekatan akses sering timbul. Menggunakan Selenium untuk tugasan sedemikian menjadi rumit, terutamanya apabila menggunakan penyemak imbas tanpa kepala. Pelayar tanpa kepala membenarkan interaksi tanpa GUI, tetapi mengurus proksi secara manual dalam persekitaran ini menjadi mencabar. Anda perlu mengkonfigurasi tetapan proksi, memutar IP dan mengendalikan interaksi lain seperti pemaparan JavaScript, menjadikan pengikisan lebih perlahan dan terdedah kepada kegagalan.
Sebaliknya, ScraperAPI menyelaraskan proses ini dengan ketara dengan menguruskan proksi secara automatik. Daripada menangani konfigurasi manual dalam Selenium, mod proksi ScraperAPI mengedarkan permintaan merentasi berbilang alamat IP, memastikan pengikisan lebih lancar tanpa perlu risau tentang larangan IP, had kadar atau sekatan geografi. Ini menjadi amat berguna apabila bekerja dengan penyemak imbas tanpa kepala, di mana pengendalian kandungan dinamik dan interaksi tapak yang kompleks memerlukan pengekodan tambahan.
Menyediakan ScraperAPI dengan Selenium
Mengintegrasikan mod proksi ScraperAPI dengan Selenium, dipermudahkan dengan menggunakan Selenium Wire, alat yang membolehkan konfigurasi proksi mudah. Berikut ialah persediaan pantas:
- Daftar untuk ScraperAPI: Buat akaun dan dapatkan kunci API anda.
- Pasang Selenium Wire: Gantikan Selenium standard dengan Selenium Wire dengan menjalankan pip install selenium-wire.
- Konfigurasikan Proksi: Gunakan kumpulan proksi ScraperAPI dalam tetapan WebDriver anda untuk menguruskan putaran IP dengan mudah.
Setelah disepadukan, konfigurasi ini membolehkan interaksi yang lebih lancar dengan halaman dinamik, alamat IP berputar secara automatik dan melangkau had kadar tanpa kerumitan manual mengurus proksi dalam persekitaran penyemak imbas tanpa kepala.
Coretan di bawah menunjukkan cara mengkonfigurasi proksi ScraperAPI dalam Python:
import os import time from bs4 import BeautifulSoup from dotenv import load_dotenv from selenium.common.exceptions import NoSuchElementException, TimeoutException from selenium.webdriver.chrome.options import Options from selenium.webdriver.chrome.service import Service as ChromeService from selenium.webdriver.common.by import By from selenium.webdriver.support import expected_conditions as EC from selenium.webdriver.support.ui import WebDriverWait from seleniumwire import webdriver from webdriver_manager.chrome import ChromeDriverManager # Load environment variables load_dotenv() def target_com_scraper(): """ SCRAPER SETTINGS - API_KEY: Your ScraperAPI key. Get your API Key ==> https://www.scraperapi.com/?fp_ref=eunit """ API_KEY = os.getenv("API_KEY", "yourapikey") # ScraperAPI proxy settings (with HTTP and HTTPS variants) scraper_api_proxies = { 'proxy': { 'http': f'http://scraperapi:{API_KEY}@proxy-server.scraperapi.com:8001', 'https': f'http://scraperapi:{API_KEY}@proxy-server.scraperapi.com:8001', 'no_proxy': 'localhost,127.0.0.1' } } # URLs to scrape url_list = [ "https://www.target.com/p/enclosed-cat-litter-box-xl-up-up/-/A-90310047?preselect=87059440#lnk=sametab", ] # Store scraped data scraped_data = [] # Setup Selenium options with proxy options = Options() # options.add_argument("--headless") # Uncomment for headless mode options.add_argument("--no-sandbox") options.add_argument("--disable-dev-shm-usage") options.add_argument("--disable-extensions") options.add_argument("--disable-in-process-stack-traces") options.add_argument("--window-size=1920,1080") options.add_argument("--log-level=3") options.add_argument("--disable-logging") options.add_argument("--start-maximized") # Initialize Selenium WebDriver driver = webdriver.Chrome(service=ChromeService( ChromeDriverManager().install()), options=options, seleniumwire_options=scraper_api_proxies) def scroll_down_page(distance=100, delay=0.2): """ Scroll down the page gradually until the end. Args: - distance: Number of pixels to scroll by in each step. - delay: Time (in seconds) to wait between scrolls. """ total_height = driver.execute_script( "return document.body.scrollHeight") scrolled_height = 0 while scrolled_height div") for review in reviews_list: # Create a dictionary to store each review's data ratings = {} # Extract title title_element = review.select_one( "h4[data-test='review-card--title']") ratings['title'] = title_element.text.strip( ) if title_element else None # Extract rating rating_element = review.select_one("span[data-test='ratings']") ratings['rating'] = rating_element.text.strip( ) if rating_element else None # Extract time time_element = review.select_one( "span[data-test='review-card--reviewTime']") ratings['time'] = time_element.text.strip( ) if time_element else None # Extract review text text_element = review.select_one( "div[data-test='review-card--text']") ratings['text'] = text_element.text.strip( ) if text_element else None # Append each review to the list of reviews scraped_reviews.append(ratings) # Append the list of reviews to the main product data reviews_data["reviews"] = scraped_reviews # Append the overall data to the scraped_data list scraped_data.append(reviews_data) # Output the scraped data print(f"Scraped data: {scraped_data}") except Exception as e: print(f"Error: {e}") finally: # Ensure driver quits after scraping driver.quit() if __name__ == "__main__": target_com_scraper()
Dengan persediaan ini, permintaan yang dihantar ke pelayan proksi ScraperAPI dialihkan ke tapak web Target.com, memastikan IP sebenar anda tersembunyi dan menyediakan pertahanan yang teguh terhadap mekanisme anti-mengikis tapak web Target.com. Proksi juga boleh disesuaikan dengan memasukkan parameter seperti render=true untuk pemaparan JavaScript atau menentukan country_code untuk geolokasi.
Data Semakan Dikikis daripada Target.com
Kod JSON di bawah ialah contoh respons menggunakan Pengikis Ulasan Sasaran:
python3 -m venv env
Cara Menggunakan Pengikis Ulasan Cloud Target.com Kami
Jika anda ingin mendapatkan ulasan Target.com anda dengan cepat tanpa menyediakan persekitaran anda, mengetahui cara mengekod atau menyediakan proksi, anda boleh menggunakan API Pengikis Sasaran kami untuk mendapatkan data yang anda perlukan secara percuma. API Pengikis Sasaran dihoskan pada platform Apify dan sedia untuk digunakan tanpa sebarang persediaan diperlukan.
Pergi ke Apify dan klik pada "Cuba secara percuma" untuk bermula sekarang.
Menggunakan Ulasan Sasaran untuk Analisis Sentimen
Sekarang anda mempunyai data ulasan dan penilaian Target.com anda, tiba masanya untuk memahami data ini. Data ulasan dan penilaian ini boleh memberikan cerapan berharga tentang pendapat pelanggan tentang produk atau perkhidmatan tertentu. Dengan menganalisis ulasan ini, anda boleh mengenal pasti pujian dan aduan biasa, mengukur kepuasan pelanggan, meramalkan gelagat masa hadapan dan mengubah ulasan ini menjadi cerapan yang boleh diambil tindakan.
Sebagai profesional pemasaran atau pemilik perniagaan yang mencari cara untuk memahami khalayak utama anda dengan lebih baik dan meningkatkan strategi pemasaran dan produk anda. Di bawah ialah beberapa cara anda boleh mengubah data ini menjadi cerapan yang boleh diambil tindakan untuk mengoptimumkan usaha pemasaran, menambah baik strategi produk dan meningkatkan penglibatan pelanggan:
- Menambah Penawaran Produk: Kenal pasti aduan atau pujian pelanggan biasa untuk memperhalusi ciri produk.
- Meningkatkan Perkhidmatan Pelanggan: Kesan ulasan negatif awal untuk menangani isu dan mengekalkan kepuasan pelanggan.
- Mengoptimumkan Kempen Pemasaran: Gunakan cerapan daripada maklum balas positif untuk mencipta kempen yang diperibadikan dan disasarkan.
Dengan menggunakan ScraperAPI untuk mengumpulkan data semakan berskala besar pada skala, anda boleh mengautomasikan dan menskalakan analisis sentimen, membolehkan membuat keputusan dan pertumbuhan yang lebih baik.
Soalan Lazim Mengenai Mengikis Ulasan Produk Sasaran
Adakah undang-undang mengikis halaman produk Target.com?
Ya, adalah sah untuk melarikan diri dari Target.com untuk mendapatkan maklumat yang tersedia secara umum, seperti penilaian dan ulasan produk. Tetapi penting untuk diingat bahawa maklumat awam ini mungkin masih termasuk butiran peribadi.
Kami menulis catatan blog tentang aspek undang-undang pengikisan web dan pertimbangan etika. Anda boleh mengetahui lebih lanjut di sana.
Adakah Target.com menyekat pengikis?
Ya, Target.com melaksanakan pelbagai langkah anti-mengikis untuk menyekat pengikis automatik. Ini termasuk cabaran penyekatan IP, pengehadan kadar dan CAPTCHA, semuanya direka untuk mengesan dan menghentikan permintaan automatik yang berlebihan daripada pengikis atau bot.
Bagaimanakah anda mengelak daripada disekat oleh Target.com?
Untuk mengelak daripada disekat oleh Target.com, anda harus memperlahankan kadar permintaan, menggilirkan ejen pengguna, menggunakan teknik penyelesaian CAPTCHA dan elakkan membuat permintaan berulang atau frekuensi tinggi. Menggabungkan kaedah ini dengan proksi boleh membantu mengurangkan kemungkinan pengesanan.
Selain itu, pertimbangkan untuk menggunakan pengikis khusus seperti Target Scraper API atau Scraping API untuk memintas pengehadan Target.com ini.
Adakah saya perlu menggunakan proksi untuk mengikis Target.com?
Ya, menggunakan proksi adalah penting untuk mengikis Target.com dengan berkesan. Proksi membantu mengedarkan permintaan merentas berbilang alamat IP, meminimumkan peluang untuk disekat. Proksi ScraperAPI menyembunyikan IP anda, menjadikannya lebih sukar bagi sistem anti-mengikis untuk mengesan aktiviti anda.
Membungkus
Dalam artikel ini, anda mempelajari cara membina pengikis penilaian dan ulasan Target.com menggunakan Python, Selenium dan menggunakan ScraperAPI untuk memintas mekanisme anti-mengikis Target.com dengan berkesan, dan untuk mengelakkan larangan IP dan meningkatkan prestasi mengikis.
Dengan alat ini, anda boleh mengumpul maklum balas pelanggan yang berharga dengan cekap dan boleh dipercayai.
Setelah anda mengumpulkan data ini, langkah seterusnya ialah menggunakan analisis sentimen untuk mendedahkan cerapan utama. Dengan menganalisis ulasan pelanggan, anda sebagai perniagaan boleh mengenal pasti kekuatan produk, menangani titik kesakitan dan mengoptimumkan strategi pemasaran anda untuk memenuhi keperluan pelanggan anda dengan lebih baik.
Dengan menggunakan API Pengikis Sasaran untuk pengumpulan data berskala besar, anda boleh memantau ulasan secara berterusan dan kekal di hadapan dalam memahami sentimen pelanggan, membolehkan anda memperhalusi pembangunan produk dan mencipta lebih banyak kempen pemasaran yang disasarkan.
Cuba ScraperAPI sekarang untuk pengekstrakan data berskala besar yang lancar atau gunakan Pengikis Ulasan Cloud Target.com kami!
Untuk lebih banyak tutorial dan kandungan yang hebat, sila ikuti saya di Twitter (X) @eunit99
Atas ialah kandungan terperinci Cara Mengikis Ulasan Target.com dengan Python. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Penyelesaian kepada Isu Kebenaran Semasa Melihat Versi Python di Terminal Linux Apabila anda cuba melihat versi Python di Terminal Linux, masukkan Python ...

Artikel ini menerangkan cara menggunakan sup yang indah, perpustakaan python, untuk menghuraikan html. Ia memperincikan kaedah biasa seperti mencari (), find_all (), pilih (), dan get_text () untuk pengekstrakan data, pengendalian struktur dan kesilapan HTML yang pelbagai, dan alternatif (sel

Serialization dan deserialization objek Python adalah aspek utama dari mana-mana program bukan remeh. Jika anda menyimpan sesuatu ke fail python, anda melakukan siri objek dan deserialization jika anda membaca fail konfigurasi, atau jika anda menjawab permintaan HTTP. Dalam erti kata, siri dan deserialization adalah perkara yang paling membosankan di dunia. Siapa yang peduli dengan semua format dan protokol ini? Anda mahu berterusan atau mengalirkan beberapa objek python dan mengambilnya sepenuhnya pada masa yang akan datang. Ini adalah cara yang baik untuk melihat dunia pada tahap konseptual. Walau bagaimanapun, pada tahap praktikal, skim siri, format atau protokol yang anda pilih boleh menentukan kelajuan, keselamatan, kebebasan status penyelenggaraan, dan aspek lain dari program

Artikel ini membandingkan tensorflow dan pytorch untuk pembelajaran mendalam. Ia memperincikan langkah -langkah yang terlibat: penyediaan data, bangunan model, latihan, penilaian, dan penempatan. Perbezaan utama antara rangka kerja, terutamanya mengenai grap pengiraan

Modul Statistik Python menyediakan keupayaan analisis statistik data yang kuat untuk membantu kami dengan cepat memahami ciri -ciri keseluruhan data, seperti biostatistik dan analisis perniagaan. Daripada melihat titik data satu demi satu, cuma melihat statistik seperti min atau varians untuk menemui trend dan ciri dalam data asal yang mungkin diabaikan, dan membandingkan dataset besar dengan lebih mudah dan berkesan. Tutorial ini akan menjelaskan cara mengira min dan mengukur tahap penyebaran dataset. Kecuali dinyatakan sebaliknya, semua fungsi dalam modul ini menyokong pengiraan fungsi min () dan bukan hanya menjumlahkan purata. Nombor titik terapung juga boleh digunakan. Import secara rawak Statistik import dari fracti

Tutorial ini dibina pada pengenalan sebelumnya kepada sup yang indah, memberi tumpuan kepada manipulasi DOM di luar navigasi pokok mudah. Kami akan meneroka kaedah dan teknik carian yang cekap untuk mengubahsuai struktur HTML. Satu kaedah carian dom biasa ialah Ex

Artikel ini membincangkan perpustakaan Python yang popular seperti Numpy, Pandas, Matplotlib, Scikit-Learn, Tensorflow, Django, Flask, dan Permintaan, memperincikan kegunaan mereka dalam pengkomputeran saintifik, analisis data, visualisasi, pembelajaran mesin, pembangunan web, dan h

Artikel ini membimbing pemaju Python mengenai bangunan baris baris komando (CLI). Butirannya menggunakan perpustakaan seperti Typer, Klik, dan ArgParse, menekankan pengendalian input/output, dan mempromosikan corak reka bentuk mesra pengguna untuk kebolehgunaan CLI yang lebih baik.


Alat AI Hot

Undresser.AI Undress
Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover
Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool
Gambar buka pakaian secara percuma

Clothoff.io
Penyingkiran pakaian AI

AI Hentai Generator
Menjana ai hentai secara percuma.

Artikel Panas

Alat panas

Muat turun versi mac editor Atom
Editor sumber terbuka yang paling popular

Dreamweaver Mac版
Alat pembangunan web visual

Pelayar Peperiksaan Selamat
Pelayar Peperiksaan Selamat ialah persekitaran pelayar selamat untuk mengambil peperiksaan dalam talian dengan selamat. Perisian ini menukar mana-mana komputer menjadi stesen kerja yang selamat. Ia mengawal akses kepada mana-mana utiliti dan menghalang pelajar daripada menggunakan sumber yang tidak dibenarkan.

DVWA
Damn Vulnerable Web App (DVWA) ialah aplikasi web PHP/MySQL yang sangat terdedah. Matlamat utamanya adalah untuk menjadi bantuan bagi profesional keselamatan untuk menguji kemahiran dan alatan mereka dalam persekitaran undang-undang, untuk membantu pembangun web lebih memahami proses mengamankan aplikasi web, dan untuk membantu guru/pelajar mengajar/belajar dalam persekitaran bilik darjah Aplikasi web keselamatan. Matlamat DVWA adalah untuk mempraktikkan beberapa kelemahan web yang paling biasa melalui antara muka yang mudah dan mudah, dengan pelbagai tahap kesukaran. Sila ambil perhatian bahawa perisian ini

mPDF
mPDF ialah perpustakaan PHP yang boleh menjana fail PDF daripada HTML yang dikodkan UTF-8. Pengarang asal, Ian Back, menulis mPDF untuk mengeluarkan fail PDF "dengan cepat" dari tapak webnya dan mengendalikan bahasa yang berbeza. Ia lebih perlahan dan menghasilkan fail yang lebih besar apabila menggunakan fon Unicode daripada skrip asal seperti HTML2FPDF, tetapi menyokong gaya CSS dsb. dan mempunyai banyak peningkatan. Menyokong hampir semua bahasa, termasuk RTL (Arab dan Ibrani) dan CJK (Cina, Jepun dan Korea). Menyokong elemen peringkat blok bersarang (seperti P, DIV),