Panther – thư viện dùng để scrape website

Tản mạn 1 xíu Vào một ngày nọ, khi nhận được 1 ticket yêu cầu lấy đường dẫn cuối cùng của 1 link rút gọn và lấy cookie của 1 trang web bất kỳ từ phía server, tôi đã thay đổi trạng thái của ticket sang “In-Progress“. Nhưng 1 hồi sau đó thì gặp…. Vấn

Tản mạn 1 xíu

Vào một ngày nọ, khi nhận được 1 ticket yêu cầu lấy đường dẫn cuối cùng của 1 link rút gọn và lấy cookie của 1 trang web bất kỳ từ phía server, tôi đã thay đổi trạng thái của ticket sang “In-Progress“. Nhưng 1 hồi sau đó thì gặp….

Vấn đề 1: Việc lấy đường dẫn cuối cùng của 1 link rút gọn dường như có thể sử dụng CURL (PHP). Nhưng đời không như mơ, khi cái link rút gọn đấy lại dẫn đến 1 trang web chứa đoạn mã redirect bằng javascript và thế thì không thể lấy được đường dẫn cuối cùng mà mong muốn.

Vấn đề 2: Việc lấy cookie của 1 trang web bất kỳ từ phía server như cách thông thường có vẻ như… no hope !!

Và rồi khi đã định comment “The ticket is not support…..” vào ticket thì ông bụt đã hiện lên và thỏ thẻ vào tai mình là thử symfony/panther đi, thử symfony/panther đi.

Thôi không dài dòng nữa. Mình thử Panther và đã thành công giải quyết được 2 vấn đề trên. Còn làm như nào thì mình sẽ hướng dẫn bên dưới nhé. It’s easy !!

Cài đặt và sử dụng

Cài đặt Panther:

composer req symfony/panther

Cài đặt Drivers:

composer require dbrekelmans/bdi
vendor/bin/bdi detect drivers

Sử dụng:

/* khởi tạo 1 trình duyệt chrome ảo */
$client = Client::createChromeClient();

/* mở 1 request với link rút gọn bằng phương thức GET */
$client->request('GET', 'https://stvkr.com/click-DQWEJ-FMEQ54?tl=1');

/* lấy đường dẫn cuối cùng sau khi đã được redirect */
$lastUrl = $client->getCurrentURL();

/* lấy coockie của trang web */
$cookies = $client->getCookieJar()->all();

Lưu ý:
Khi sử dụng nên tránh việc chạy cùng lúc 2 trình duyệt ảo vì có thể bị gặp lỗi về “the port is already in use“.

Mở rộng

Ngoài những lợi ích trên thì Panther có thể được sử dụng để crawl data của trang web thông thường hoặc những trang web được render bằng 100% javascript.


Bài viết đến đây là hết rồi. Nếu các bạn cảm thấy hữu ích thì vote cho mình nhé. Hoặc có gì góp ý thì hãy comment bên dưới. Thank you!!

Tài liệu tham khảo:https://github.com/symfony/panther

Nguồn: viblo.asia

Bài viết liên quan

9 Mẹo lập trình Web “ẩn mình” giúp tiết kiệm hàng giờ đồng hồ

Hầu hết các lập trình viên (kể cả những người giỏi) đều tốn thời gian x

Can GPT-4o Generate Images? All You Need to Know about GPT-4o-image

OpenAI‘s GPT-4o, introduced on March 25, 2025, has revolutionized the way we create visual con

Khi nào nên dùng main, section, article, header, footer, và aside trong HTML5

HTML5 đã giới thiệu các thẻ ngữ nghĩa giúp cấu trúc nội dung web một cách có

So sánh Webhook và API: Khi nào nên sử dụng?

Trong lĩnh vực công nghệ thông tin và phát triển phần mềm, Webhook và API là hai th