cari
Rumahpembangunan bahagian belakangTutorial PythonCara Mengikis Ulasan Target.com dengan Python

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.

How to Scrape Target.com Reviews with Python

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.

How to Scrape Target.com Reviews with Python

Saya akan menumpukan pada ulasan dan penilaian daripada bahagian tapak web ini yang diserlahkan dalam tangkapan skrin ini di bawah:

How to Scrape Target.com Reviews with Python

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:

How to Scrape Target.com Reviews with Python

How to Scrape Target.com Reviews with Python

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:

  1. Daftar untuk ScraperAPI: Buat akaun dan dapatkan kunci API anda.
  2. Pasang Selenium Wire: Gantikan Selenium standard dengan Selenium Wire dengan menjalankan pip install selenium-wire.
  3. 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

How to Scrape Target.com Reviews with Python

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.

How to Scrape Target.com Reviews with Python

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!

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
Bagaimana untuk menyelesaikan masalah kebenaran yang dihadapi semasa melihat versi Python di Terminal Linux?Bagaimana untuk menyelesaikan masalah kebenaran yang dihadapi semasa melihat versi Python di Terminal Linux?Apr 01, 2025 pm 05:09 PM

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

Bagaimana saya menggunakan sup yang indah untuk menghuraikan html?Bagaimana saya menggunakan sup yang indah untuk menghuraikan html?Mar 10, 2025 pm 06:54 PM

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 deserialisasi objek python: Bahagian 1Serialization dan deserialisasi objek python: Bahagian 1Mar 08, 2025 am 09:39 AM

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

Bagaimana untuk melakukan pembelajaran mendalam dengan Tensorflow atau Pytorch?Bagaimana untuk melakukan pembelajaran mendalam dengan Tensorflow atau Pytorch?Mar 10, 2025 pm 06:52 PM

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 Matematik dalam Python: StatistikModul Matematik dalam Python: StatistikMar 09, 2025 am 11:40 AM

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

Mengikis halaman web dalam python dengan sup yang indah: carian dan pengubahsuaian domMengikis halaman web dalam python dengan sup yang indah: carian dan pengubahsuaian domMar 08, 2025 am 10:36 AM

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

Apakah beberapa perpustakaan Python yang popular dan kegunaan mereka?Apakah beberapa perpustakaan Python yang popular dan kegunaan mereka?Mar 21, 2025 pm 06:46 PM

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

Bagaimana untuk membuat antara muka baris arahan (CLI) dengan python?Bagaimana untuk membuat antara muka baris arahan (CLI) dengan python?Mar 10, 2025 pm 06:48 PM

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.

See all articles

Alat AI Hot

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

AI Hentai Generator

AI Hentai Generator

Menjana ai hentai secara percuma.

Artikel Panas

R.E.P.O. Kristal tenaga dijelaskan dan apa yang mereka lakukan (kristal kuning)
3 minggu yang laluBy尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Tetapan grafik terbaik
3 minggu yang laluBy尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Cara Memperbaiki Audio Jika anda tidak dapat mendengar sesiapa
3 minggu yang laluBy尊渡假赌尊渡假赌尊渡假赌

Alat panas

Muat turun versi mac editor Atom

Muat turun versi mac editor Atom

Editor sumber terbuka yang paling popular

Dreamweaver Mac版

Dreamweaver Mac版

Alat pembangunan web visual

Pelayar Peperiksaan Selamat

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

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

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),