Bỏ để qua phần nội dung

403 Forbidden: Tai ương của Web Scrapers (Và cách tránh nó)

  • by
  • Blog
  • Đã đọc 8 phút

Nếu bạn đã từng cố gắng thu thập dữ liệu từ các trang web, gần như chắc chắn bạn đã gặp phải lỗi "403 Forbidden" đáng sợ vào một lúc nào đó. Mã trạng thái HTTP này cho biết rằng máy chủ hiểu yêu cầu của bạn nhưng từ chối thực hiện yêu cầu đó. Nói cách khác, bạn không có quyền truy cập tài nguyên mà bạn yêu cầu.

Đối với những người quét web, lỗi 403 là vấn đề đau đầu thường xuyên. Các trang web sử dụng chúng để ngăn chặn việc truy cập trái phép vào các trang và chặn lưu lượng truy cập dường như đến từ bot hoặc người dọn dẹp chứ không phải người dùng con người. Nhận được phản hồi 403 có thể khiến dự án quét web của bạn bị đình trệ.

Nhưng đừng tuyệt vọng! Mặc dù lỗi 403 có thể gây khó chịu nhưng chúng không phải là không thể khắc phục được. Với các kỹ thuật phù hợp, bạn có thể tránh kích hoạt lỗi 403 và giữ cho trình quét web của bạn hoạt động trơn tru. Trong hướng dẫn này, chúng ta sẽ đi sâu vào nguyên nhân gây ra lỗi 403 và khám phá các chiến lược để ngăn chặn chúng. Bắt đầu nào!

Tại sao trình thu thập dữ liệu web gặp lỗi 403

Có một số lý do chính khiến trình quét web có thể nhận được phản hồi 403 Bị cấm từ một trang web:

  1. Yêu cầu một nguồn tài nguyên hạn chế: Một số trang đơn giản là không cho phép người dùng truy cập trái phép. Ví dụ: cố gắng truy cập một trang yêu cầu đăng nhập, chẳng hạn như bảng điều khiển người dùng, thường sẽ dẫn đến lỗi 403 nếu bạn không có phiên hợp lệ.

  2. Thiếu xác thực: Nhiều trang web yêu cầu một số hình thức xác thực, chẳng hạn như đăng nhập bằng tên người dùng và mật khẩu, để truy cập một số trang nhất định. Nếu trình quét web của bạn không cung cấp thông tin xác thực cần thiết, nó có thể sẽ nhận được phản hồi 403.

  3. phát hiện bot: Các trang web thường sử dụng nhiều kỹ thuật khác nhau để phát hiện và chặn lưu lượng truy cập có vẻ như đến từ bot hoặc trình thu thập dữ liệu. Nếu một trang web tin rằng trình quét web của bạn là một công cụ tự động chứ không phải là người dùng con người, trang web đó có thể phản hồi với lỗi 403.

  4. Hệ thống chống bot: Một số trang web sử dụng các giải pháp chống bot chuyên dụng như Cloudflare, Imperva hoặc PerimeterX để bảo vệ khỏi hoạt động thu thập dữ liệu và các mối đe dọa tự động khác. Các hệ thống này phân tích các mẫu lưu lượng truy cập và chặn các yêu cầu có vẻ đáng ngờ, thường trả về lỗi 403.

Để quét thành công các trang web, chúng tôi cần có cách để tránh những vấn đề này và thuyết phục các trang web rằng trình quét web của chúng tôi là người dùng hợp pháp, được ủy quyền. May mắn thay, chúng ta có thể thực hiện một số cách tiếp cận. Hãy xem xét một số chiến thuật hiệu quả nhất.

Cung cấp xác thực

Nếu một trang web yêu cầu đăng nhập để truy cập nội dung bạn muốn thu thập dữ liệu, bạn sẽ cần phải đưa tính năng xác thực vào quy trình thu thập dữ liệu web của mình. Điều này thường bao gồm hai bước:

  1. Kiểm tra quá trình đăng nhập: Sử dụng các công cụ dành cho nhà phát triển trên trình duyệt của bạn để quan sát lưu lượng mạng khi đăng nhập vào trang web theo cách thủ công. Tìm yêu cầu gửi thông tin xác thực đăng nhập và lưu ý URL, phương thức yêu cầu, tiêu đề và nội dung yêu cầu. Bạn sẽ cần sao chép yêu cầu này trong trình quét web của mình.

  2. Đăng nhập theo chương trình: Sử dụng thư viện như Yêu cầu của Python hoặc Axios của Node.js để gửi yêu cầu đăng nhập bắt chước yêu cầu bạn đã quan sát. Ghi lại mọi cookie mà trang web trả về vì chúng thường chứa mã thông báo phiên cần thiết để xác thực các yêu cầu tiếp theo. Bao gồm các cookie này trong tiêu đề của yêu cầu quét web của bạn để duy trì phiên đăng nhập hợp lệ.

Dưới đây là ví dụ về việc đăng nhập theo chương trình vào một trang web bằng Python và Yêu cầu:

import requests

# Start a new session
session = requests.Session() 

# Send a POST request to the login URL with the necessary credentials
login_data = {
    ‘username‘: ‘my_username‘,
    ‘password‘: ‘my_password‘,
}
response = session.post(‘https://example.com/login‘, data=login_data)

# The session now contains the cookies needed to authenticate future requests
response = session.get(‘https://example.com/restricted_page‘)

Bằng cách xác thực trình quét web của bạn và bao gồm các cookie và tiêu đề cần thiết trong yêu cầu của bạn, bạn có thể tránh được lỗi 403 do thiếu quyền.

Kỹ thuật tàng hình

Tất nhiên, đăng nhập không phải lúc nào cũng đủ. Các trang web đang tham gia vào một trò chơi mèo vờn chuột liên tục với những kẻ phá hoại web, tìm kiếm các tín hiệu để phân biệt bot với người dùng con người. Để tránh bị chặn, những kẻ quét web cần phải hòa nhập bằng cách bắt chước hành vi của con người càng giống càng tốt.

Một số kỹ thuật tàng hình chính bao gồm:

  • Xoay tác nhân người dùng: Tác nhân người dùng là một chuỗi xác định ứng dụng khách đưa ra yêu cầu. Việc sử dụng cùng một tác nhân người dùng cho tất cả các yêu cầu là một dấu hiệu rõ ràng rằng lưu lượng truy cập đến từ bot. Thay vào đó, hãy duy trì một nhóm chuỗi tác nhân người dùng và chọn ngẫu nhiên một chuỗi khác nhau cho mỗi yêu cầu.

  • Địa chỉ IP luân phiên: Gửi một lượng lớn yêu cầu từ một địa chỉ IP duy nhất là một cảnh báo đỏ khác đối với các hệ thống phát hiện bot. Sử dụng dịch vụ proxy để định tuyến các yêu cầu thông qua nhiều địa chỉ IP. Để có kết quả tốt nhất, hãy chọn nhà cung cấp cung cấp nhiều IP dân cư.

  • Ngẫu nhiên hóa các mẫu yêu cầu: Con người không duyệt các trang web một cách hoàn toàn đều đặn. Họ tạm dừng, thay đổi trang thất thường và thay đổi thời gian giữa các yêu cầu. Đưa ra các độ trễ ngẫu nhiên giữa các yêu cầu thu thập dữ liệu web của bạn và tránh thu thập dữ liệu các trang web theo mô hình hoàn toàn có thể dự đoán được.

  • Xử lý CAPTCHA: Một số trang web sẽ hiển thị CAPTCHA khi nghi ngờ hoạt động của bot. CAPTCHA có thể khó khăn đối với những người quét web để tự động giải quyết. Nếu thường xuyên gặp chúng, bạn có thể cần phải sử dụng dịch vụ giải CAPTCHA sử dụng nhân công để hoàn thành các thử thách thay mặt cho người quét của bạn.

Dưới đây là ví dụ về yêu cầu lén lút hơn trong Python bằng cách sử dụng tác nhân người dùng ngẫu nhiên và độ trễ:

import requests
import random
import time

# List of user agent strings
user_agents = [    
    ‘Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36‘,
    ‘Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.121 Safari/537.36‘,
    ‘Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.157 Safari/537.36‘,  
]

# Randomize user agent 
headers = {‘User-Agent‘: random.choice(user_agents)}

# Introduce a random delay of 1-5 seconds
time.sleep(random.randint(1, 5))

# Send the request
response = requests.get(‘https://example.com‘, headers=headers)

Bằng cách thực hiện các bước để làm cho lưu lượng truy cập của trình quét web trông giống "con người" nhất có thể, bạn có thể giảm đáng kể nguy cơ gặp phải lỗi 403 và các trở ngại khác.

Tự động hóa không thể phát hiện

Để quét web một cách lén lút nhất có thể, bạn có thể muốn sử dụng công cụ tự động hóa trình duyệt hoàn chỉnh như Puppeteer hoặc Playwright. Những công cụ này chạy trình duyệt thực tế (Chrome hoặc Firefox) theo chương trình, cho phép bạn tương tác với các trang web theo cách rất khó phân biệt với người dùng thực.

Các công cụ tự động hóa trình duyệt có thể được cấu hình để tàng hình tối đa. Ví dụ: bạn có thể đặt chúng để chặn mã lấy dấu vân tay JavaScript, che giấu các dấu hiệu nhận biết về tự động hóa trong các đối tượng Điều hướng và ngẫu nhiên hóa các kích thước khung nhìn. Bằng cách kiểm soát trình duyệt thực, bạn cũng có thể tự động xử lý cookie, tiêu đề, chuyển hướng và các khía cạnh khác của HTTP mà các thư viện quét web cơ bản không quản lý cho bạn.

Nhược điểm của tự động hóa trình duyệt là tốn nhiều tài nguyên hơn và chậm hơn so với việc gửi các yêu cầu HTTP đơn giản bằng thư viện như Yêu cầu hoặc Axios. Tuy nhiên, sự đánh đổi về hiệu suất có thể đáng giá đối với các trang web đặc biệt tích cực trong việc chặn những kẻ phá hoại.

Đây là ví dụ cơ bản về việc sử dụng Puppeteer trong Node.js để truy cập một trang trong Chrome không có đầu:

const puppeteer = require(‘puppeteer‘);

(async () => {
  const browser = await puppeteer.launch();
  const page = await browser.newPage();

  // Configure the browser for stealth (omitted for brevity)

  await page.goto(‘https://example.com‘);

  // Scrape data from the page...

  await browser.close();
})();

Với một số cấu hình bổ sung, các công cụ như Puppeteer có thể là một cách mạnh mẽ để tự động thu thập thông tin trong khi tránh bị phát hiện.

Kết luận

Gặp phải lỗi 403 là một phần không thể tránh khỏi trong quá trình quét web, nhưng với cách tiếp cận phù hợp, chúng sẽ không làm hỏng dự án của bạn. Bằng cách hiểu lý do tại sao 403 xảy ra và thực hiện các bước để tránh kích hoạt chúng – thông qua xác thực, kỹ thuật ẩn và tự động hóa không thể phát hiện – bạn có thể giữ cho trình quét web của mình hoạt động trơn tru.

Cách tiếp cận hiệu quả nhất sẽ khác nhau tùy thuộc vào các trang web cụ thể mà bạn đang nhắm mục tiêu. Một số có thể chỉ yêu cầu các tiêu đề yêu cầu đơn giản để tránh lỗi 403, trong khi một số khác có thể yêu cầu thiết lập tự động hóa toàn bộ trình duyệt. Điều quan trọng là bắt đầu với các kỹ thuật cơ bản và thêm các lớp tàng hình phức tạp hơn nếu cần dựa trên những trở ngại bạn gặp phải.

Nếu thách thức ngày càng tăng trong việc tránh các lỗi 403 và các biện pháp chống thu thập dữ liệu khác khiến bạn nản lòng, bạn có thể cân nhắc sử dụng API thu thập dữ liệu web sẵn có thay vì xây dựng và duy trì cơ sở hạ tầng thu thập dữ liệu của riêng bạn. Các dịch vụ như ScrapingBee và ScraperAPI cung cấp các công cụ dọn dẹp đã được thử nghiệm trong trận chiến với khả năng tránh 403 tích hợp có thể giúp bạn tiết kiệm đáng kể thời gian phát triển.

Cho dù bạn chọn sử dụng trình quét web của riêng mình hay sử dụng giải pháp dựng sẵn, điều quan trọng là không để lỗi 403 ngăn bạn lấy dữ liệu mình cần. Với một chút kiên trì và các công cụ phù hợp trong bộ công cụ của mình, bạn có thể duy trì trình quét web của mình bất chấp mọi biện pháp đối phó chống bot. Chúc mừng cạo!

Tham gia vào cuộc đối thoại

Chúng tôi sẽ không công khai email của bạn. Các ô đánh dấu * là bắt buộc *