Jak zeskrobać dane z Pinteresta za pomocą Pythona

Komentarze: 0

W tym artykule omówiono metodę skrobania Pinteresta przy użyciu Pythona i Playwright, solidnej biblioteki automatyzacji. Pinterest, znany z bogatej zawartości wizualnej, służy jako podatny grunt do analizy danych lub inicjatyw automatyzacji. W szczególności wyodrębnianie adresów URL obrazów z wyników wyszukiwania może mieć kluczowe znaczenie dla badań lub przedsięwzięć komercyjnych.

Playwright ułatwia automatyzację interaktywnych sesji w wielu przeglądarkach. Posiada takie funkcje, jak przechwytywanie żądań sieciowych, co pozwala na bezpośrednią ekstrakcję danych z ruchu. Dodatkowo, jego zdolność do działania w trybie no-render zwiększa wydajność i skalowalność skrobania. Korzystanie z serwerów proxy, choć opcjonalne, jest zalecane w celu zapewnienia anonimowości i obejścia potencjalnych blokad, tym samym umacniając Playwright jako preferowane narzędzie do zbierania treści wizualnych z Pinteresta.

Konfiguracja Playwright dla Pythona

Zanim zaczniemy, musisz zainstalować Playwright w swoim środowisku Python. Można to zrobić za pomocą pip:


pip install playwright

Po instalacji należy zainstalować pliki binarne przeglądarki:


playwright install

Przyjrzyjmy się teraz podstawowemu skryptowi do skrobania adresów URL obrazów z Pinteresta.

Proces pozyskiwania danych z serwisu Pinterest

Skrypt, którego pełną wersję prezentujemy poniżej, zawiera następujące elementy:

Główna funkcja

Główna funkcja tworzy adres URL zapytania wyszukiwania Pinterest na podstawie danych wprowadzonych przez użytkownika, np. https://in.pinterest.com/search/pins/?q=halloween%20decor, a następnie przekazuje go do funkcji capture_images_from_pinterest.

Przechwytywanie i filtrowanie

Strona Playwright nasłuchuje odpowiedzi sieciowych za pomocą page.on('response', ...).

Funkcja handle_response filtruje odpowiedzi sieciowe, zapewniając, że przechwytywane są tylko te z obrazami typu zasobu i adresami URL kończącymi się na .jpg.

Zapisywanie danych do CSV

Po zebraniu adresów URL obrazów zapisujemy je w pliku CSV o nazwie pinterest_images.csv, dzięki czemu zeskrobane dane można łatwo eksportować i analizować.

Kompletny kod

Oto kod Pythona, który pobiera wyniki wyszukiwania Pinterest i wyodrębnia wszystkie adresy URL obrazów:


import asyncio
from playwright.async_api import async_playwright

async def capture_images_from_pinterest(url):
    async with async_playwright() as p:
        browser = await p.chromium.launch(headless=True)
        page = await browser.new_page()

        # Przechowywanie adresów URL obrazów z końcówką ".jpg"
        image_urls = []

        # Funkcja przechwytywania i przetwarzania odpowiedzi sieciowych
        page.on('response', lambda response: handle_response(response, image_urls))

        # Przejdź do adresu URL
        await page.goto(url)

        # Poczekaj, aż aktywność sieciowa ustabilizuje się (w razie potrzeby dostosuj).
        await page.wait_for_timeout(10000)

        # Zamknij przeglądarkę
        await browser.close()

        return image_urls

# Funkcja obsługi do sprawdzania adresów URL obrazów .jpg
def handle_response(response, image_urls):
    if response.request.resource_type == 'image':
        url = response.url
        if url.endswith('.jpg'):
            image_urls.append(url)

# Główna funkcja uruchamiająca zadanie asynchroniczne
async def main(query):
    url = f"https://in.pinterest.com/search/pins/?q={query}"
    images = await capture_images_from_pinterest(url)
    
    # Zapisywanie obrazów do pliku CSV
    with open('pinterest_images.csv', 'w') as file:
        for img_url in images:
            file.write(f"{img_url}\n")

    print(f"Saved {len(images)} image URLs to pinterest_images.csv")

# Uruchom główną funkcję asynchroniczną
query = 'halloween decor'
asyncio.run(main(query))

Konfigurowanie serwerów proxy w Playwright

Skrobanie Pinterest może powodować ograniczenie szybkości lub nawet bany, jeśli wykonasz zbyt wiele żądań z tego samego adresu IP. Serwery proxy pomagają złagodzić ten problem, przekierowując żądania przez różne adresy IP, dzięki czemu wydaje się, że wielu użytkowników przegląda Pinterest.

Dlaczego warto korzystać z serwerów proxy:

  • Unikanie zakazów IP: Pinterest może tymczasowo zablokować Twój adres IP, jeśli wykryje nietypową aktywność. Serwery proxy pomagają tego uniknąć, zmieniając adresy IP.
  • Skalowalność: Korzystanie z serwerów proxy pozwala na skalowanie wysiłków związanych ze skrobaniem, minimalizując ryzyko zablokowania.
  • Zwiększenie limitów żądań: Korzystanie z serwerów proxy umożliwia pobieranie większej ilości danych bez uruchamiania limitów szybkości.

Możesz łatwo skonfigurować serwery proxy w Playwright, używając argumentu proxy w metodzie uruchamiania. W tym przykładzie zastąp "http://your-proxy-address:port" adresem serwera proxy, numerem portu i danymi uwierzytelniającymi serwera proxy.


async def capture_images_from_pinterest(url):
    async with async_playwright() as p:
        # Dodaj pełnomocnika tutaj
        browser = await p.chromium.launch(headless=True, proxy={"server": "http://your-proxy-address:port", "username": "username", "password": "password"})
        page = await browser.new_page()

W rezultacie integracja Playwright z proxy zwiększa skuteczność automatyzacji scrapingu. Takie połączenie nie tylko zmniejsza ryzyko stwarzane przez mechanizmy antybotowe, ale także zwiększa ogólną wydajność procesów gromadzenia danych.

Wyzwania związane z pobieraniem danych z Pinteresta

Istnieje kilka wyzwań, które użytkownicy mogą napotkać podczas korzystania z Playwright do skrobania danych z Pinteresta:

  • Dynamiczne ładowanie treści: Pinterest wykorzystuje techniki dynamicznego ładowania treści, w tym nieskończone przewijanie i leniwie ładowane obrazy. Wymaga to narzędzi do skrobania, które mogą skutecznie obsługiwać asynchroniczne ładowanie danych.
  • Środki zapobiegające skrobaniu: witryny takie jak Pinterest stosują różne mechanizmy zapobiegające skrobaniu, takie jak ograniczanie szybkości, aby utrudnić automatyczne pozyskiwanie danych.

Wykorzystanie Playwright z serwerami proxy i w trybie headless może skutecznie złagodzić te wyzwania, zmniejszając ryzyko blokad i zwiększając wydajność ekstrakcji danych.

Komentarze:

0 komentarze