Cara Mengikis Data Pinterest Menggunakan Python

Komentar: 0

Artikel ini membahas metode scraping Pinterest menggunakan Python dan Playwright, sebuah library otomatisasi yang kuat. Pinterest, yang dikenal dengan konten visualnya yang kaya, berfungsi sebagai lahan subur untuk analisis data atau inisiatif otomatisasi. Secara khusus, mengekstrak URL gambar dari hasil pencarian dapat menjadi sangat penting untuk penelitian atau usaha komersial.

Playwright memfasilitasi otomatisasi sesi interaktif di berbagai peramban. Ini membanggakan fitur-fitur seperti intersepsi permintaan jaringan, yang memungkinkan ekstraksi data langsung dari lalu lintas. Selain itu, kemampuannya untuk beroperasi dalam mode tanpa rendering meningkatkan efisiensi dan skalabilitas penggalian. Penggunaan proxy, meskipun opsional, direkomendasikan untuk memastikan anonimitas dan membantu menghindari potensi pemblokiran, sehingga mengukuhkan Playwright sebagai alat yang lebih disukai untuk mengambil konten visual dari Pinterest.

Menyiapkan Playwright untuk Python

Sebelum kita mulai, Anda harus menginstal Playwright di lingkungan Python Anda. Anda dapat menginstalnya menggunakan pip:


pip install playwright

Setelah terinstal, Anda harus menginstal peramban biner:


playwright install

Sekarang, mari kita lihat skrip dasar untuk mengikis URL gambar Pinterest.

Proses Mengekstrak Data dari Pinterest

Naskah, yang versi lengkapnya disajikan di bawah ini, mencakup elemen-elemen berikut ini:

Fungsi Utama

Fungsi utama membuat URL kueri penelusuran Pinterest berdasarkan input pengguna, misalnya, https://in.pinterest.com/search/pins/?q=halloween%20decor, dan kemudian meneruskannya ke fungsi capture_images_from_pinterest.

Intersepsi dan Penyaringan

Halaman Playwright mendengarkan respons jaringan menggunakan page.on('response', ...).

Fungsi handle_response memfilter respons jaringan, memastikan bahwa hanya respons dengan jenis sumber daya gambar dan URL berakhiran .jpg yang ditangkap.

Menyimpan Data ke CSV

Setelah mengumpulkan URL gambar, kami menyimpannya ke dalam file CSV bernama pinterest_images.csv, sehingga data yang telah dikikis mudah untuk diekspor dan dianalisis.

Kode Lengkap

Berikut adalah kode Python yang mengikis hasil pencarian Pinterest dan mengekstrak semua URL gambar:


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

        # Menyimpan URL gambar dengan akhiran '.jpg'
        image_urls = []

        # Berfungsi untuk mencegat dan memproses respons jaringan
        page.on('response', lambda response: handle_response(response, image_urls))

        # Arahkan ke URL
        await page.goto(url)

        # Tunggu hingga aktivitas jaringan selesai (sesuaikan jika perlu)
        await page.wait_for_timeout(10000)

        # Menutup browser
        await browser.close()

        return image_urls

# Fungsi penangan untuk memeriksa URL gambar .jpg
def handle_response(response, image_urls):
    if response.request.resource_type == 'image':
        url = response.url
        if url.endswith('.jpg'):
            image_urls.append(url)

# Fungsi utama untuk menjalankan tugas asinkronisasi
async def main(query):
    url = f"https://in.pinterest.com/search/pins/?q={query}"
    images = await capture_images_from_pinterest(url)
    
    # Menyimpan gambar ke file 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")

# Jalankan fungsi utama asinkronisasi
query = 'halloween decor'
asyncio.run(main(query))

Menyiapkan proxy di Playwright

Mengikis Pinterest dapat memicu pembatasan kecepatan atau bahkan pemblokiran jika Anda membuat terlalu banyak permintaan dari alamat IP yang sama. Proksi membantu mengurangi hal ini dengan merutekan permintaan Anda melalui alamat IP yang berbeda, sehingga terlihat seolah-olah ada banyak pengguna yang menjelajahi Pinterest.

Mengapa menggunakan proxy:

  • Hindari larangan IP: Pinterest dapat memblokir alamat IP Anda untuk sementara waktu jika mendeteksi aktivitas yang tidak biasa. Proksi membantu menghindari hal ini dengan merotasi alamat IP.
  • Skalabilitas: Menggunakan proxy memungkinkan penskalaan upaya scraping, sehingga meminimalkan risiko pemblokiran.
  • Meningkatkan batas permintaan: Menggunakan proxy memungkinkan Anda mengikis lebih banyak data tanpa memicu batas kecepatan.

Anda dapat dengan mudah mengatur proksi dengan Playwright menggunakan argumen proksi dalam metode peluncuran. Dalam contoh ini, ganti "http://your-proxy-address:port" dengan alamat server proxy, nomor port, dan kredensial proxy Anda.


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

Oleh karena itu, mengintegrasikan Playwright dengan proxy akan meningkatkan efektivitas otomatisasi scraping. Kombinasi ini tidak hanya mengurangi risiko yang ditimbulkan oleh mekanisme anti-bot, tetapi juga meningkatkan efisiensi proses pengumpulan data secara keseluruhan.

Tantangan dalam mengikis data Pinterest

Ada beberapa tantangan yang mungkin dihadapi pengguna saat menggunakan Playwright untuk mengikis data Pinterest:

  • Pemuatan konten dinamis: Pinterest menggunakan teknik pemuatan konten dinamis, termasuk pengguliran tak terbatas dan gambar yang dimuat dengan malas. Hal ini memerlukan alat pengikis yang dapat menangani pemuatan data asinkron secara efektif.
  • Langkah-langkah anti-pengikisan: situs web seperti Pinterest menggunakan berbagai mekanisme anti-pengikisan, seperti pembatasan kecepatan, untuk menghalangi upaya ekstraksi data otomatis.

Memanfaatkan Playwright dengan proxy dan dalam mode headless dapat secara efektif mengurangi tantangan ini, mengurangi risiko pemblokiran dan meningkatkan efisiensi ekstraksi data.

Komentar:

0 komentar