Cách quét dữ liệu Pinterest bằng Python

Bình luận: 0

Bài viết này khám phá phương pháp scraping Pinterest bằng Python và Playwright, một thư viện tự động hóa mạnh mẽ. Pinterest, nổi tiếng với nội dung hình ảnh phong phú, là một mảnh đất màu mỡ cho các sáng kiến phân tích dữ liệu hoặc tự động hóa. Cụ thể, việc trích xuất URL hình ảnh từ kết quả tìm kiếm có thể là yếu tố quan trọng cho các nghiên cứu hoặc dự án thương mại.

Playwright hỗ trợ tự động hóa các phiên tương tác trên nhiều trình duyệt. Nó có những tính năng như chặn các yêu cầu mạng, cho phép trích xuất dữ liệu trực tiếp từ lưu lượng truy cập. Hơn nữa, khả năng hoạt động trong chế độ không hiển thị giúp tăng cường hiệu quả scraping và khả năng mở rộng. Việc sử dụng proxy, mặc dù là tùy chọn, được khuyến nghị để đảm bảo ẩn danh và giúp tránh các khối tiềm ẩn, từ đó củng cố Playwright là công cụ ưu tiên để thu thập nội dung hình ảnh từ Pinterest.

Cài đặt Playwright cho Python

Trước khi bắt đầu, bạn cần cài đặt Playwright trong môi trường Python của mình. Bạn có thể cài đặt nó bằng pip:


pip install playwright

Sau khi được cài đặt, bạn sẽ cần cài đặt các nhị phân của trình duyệt:


playwright install

Bây giờ, hãy xem một đoạn mã cơ bản để scraping các URL hình ảnh từ Pinterest.

Quá Trình Trích Xuất Dữ Liệu từ Pinterest

Đoạn mã, phiên bản đầy đủ của nó được trình bày dưới đây, bao gồm các yếu tố sau:

Hàm Chính

Hàm chính xây dựng một URL truy vấn tìm kiếm Pinterest dựa trên đầu vào của người dùng, ví dụ: https://in.pinterest.com/search/pins/?q=halloween%20decor, sau đó truyền nó vào hàm capture_images_from_pinterest.

Chặn và Lọc

Trang Playwright lắng nghe các phản hồi mạng bằng cách sử dụng page.on('response', ...).

Hàm handle_response lọc các phản hồi mạng, đảm bảo rằng chỉ các phản hồi có loại tài nguyên là hình ảnh và URL kết thúc bằng .jpg được ghi lại.

Lưu Dữ Liệu vào CSV

Sau khi thu thập các URL hình ảnh, chúng tôi lưu chúng vào một tệp CSV có tên pinterest_images.csv, giúp việc xuất và phân tích dữ liệu scraped trở nên dễ dàng.

Mã Hoàn Chỉnh

Dưới đây là mã Python scraping kết quả tìm kiếm Pinterest và trích xuất tất cả các URL hình ảnh:


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

        # Lưu trữ URL hình ảnh với kết thúc '.jpg'
        image_urls = []

        # Chức năng chặn và xử lý các phản hồi mạng
        page.on('response', lambda response: handle_response(response, image_urls))

        # Điều hướng đến URL
        await page.goto(url)

        # Chờ hoạt động mạng để giải quyết (điều chỉnh nếu cần)
        await page.wait_for_timeout(10000)

        # Đóng trình duyệt
        await browser.close()

        return image_urls

# Chức năng xử lý để kiểm tra URL .jpg hình ảnh
def handle_response(response, image_urls):
    if response.request.resource_type == 'image':
        url = response.url
        if url.endswith('.jpg'):
            image_urls.append(url)

# Chức năng chính để chạy tác vụ không đồng bộ
async def main(query):
    url = f"https://in.pinterest.com/search/pins/?q={query}"
    images = await capture_images_from_pinterest(url)
    
    # Lưu hình ảnh vào tệp 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")

# Chạy chức năng chính Async
query = 'halloween decor'
asyncio.run(main(query))

Cài đặt Proxy trong Playwright

Việc scraping Pinterest có thể gây ra giới hạn tốc độ hoặc thậm chí bị cấm nếu bạn thực hiện quá nhiều yêu cầu từ cùng một địa chỉ IP. Proxy giúp giảm thiểu điều này bằng cách chuyển hướng các yêu cầu của bạn qua các địa chỉ IP khác nhau, khiến nó trông như thể nhiều người dùng đang duyệt Pinterest.

Tại sao nên sử dụng proxy:

  • Tránh bị cấm IP: Pinterest có thể tạm thời chặn địa chỉ IP của bạn nếu phát hiện hoạt động bất thường. Proxy giúp tránh điều này bằng cách thay đổi địa chỉ IP.
  • Khả năng mở rộng: Sử dụng proxy cho phép mở rộng nỗ lực scraping, giảm thiểu rủi ro bị chặn.
  • Tăng giới hạn yêu cầu: Sử dụng proxy cho phép bạn thu thập nhiều dữ liệu hơn mà không kích hoạt giới hạn tốc độ.

Bạn có thể dễ dàng cài đặt proxy với Playwright bằng cách sử dụng tham số proxy trong phương thức launch. Trong ví dụ này, thay thế “http://your-proxy-address:port” bằng địa chỉ máy chủ proxy của bạn, số cổng và thông tin xác thực proxy.


async def capture_images_from_pinterest(url):
    async with async_playwright() as p:
        # Thêm proxy tại đây
        browser = await p.chromium.launch(headless=True, proxy={"server": "http://your-proxy-address:port", "username": "username", "password": "password"})
        page = await browser.new_page()

Do đó, việc tích hợp Playwright với proxy nâng cao hiệu quả của tự động hóa việc scraping. Sự kết hợp này không chỉ giảm thiểu các rủi ro từ các cơ chế chống bot mà còn cải thiện hiệu suất tổng thể của quá trình thu thập dữ liệu.

Thách thức khi scraping dữ liệu Pinterest

Có một số thách thức mà người dùng có thể gặp phải khi sử dụng Playwright để scrape dữ liệu từ Pinterest:

  • Tải nội dung động: Pinterest sử dụng các kỹ thuật tải nội dung động, bao gồm cuộn vô hạn và hình ảnh tải lười. Điều này yêu cầu các công cụ scraping có thể xử lý việc tải dữ liệu bất đồng bộ một cách hiệu quả.
  • Biện pháp chống scraping: Các trang web như Pinterest sử dụng nhiều cơ chế chống scraping, như giới hạn tốc độ, để ngăn chặn các nỗ lực trích xuất dữ liệu tự động.

Việc sử dụng Playwright với proxy và chế độ headless có thể giúp giảm thiểu những thách thức này, giảm rủi ro bị chặn và cải thiện hiệu quả của việc trích xuất dữ liệu.

Bình luận:

0 Bình luận