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

WebP là gì? Hướng dẫn cách để chuyển hình ảnh jpg, png qua webp

WebP là gì? WebP là một định dạng ảnh hiện đại, được phát triển bởi Google

Điểm khác biệt giữa IPv4 và IPv6 là gì?

IPv4 và IPv6 là hai phiên bản của hệ thống địa chỉ Giao thức Internet (IP). IP l

Check nameservers của tên miền xem website trỏ đúng chưa

Tìm hiểu cách check nameservers của tên miền để xác định tên miền đó đang dùn

Mình đang dùng Google Domains để check tên miền hàng ngày

Từ khi thông báo dịch vụ Google Domains bỏ mác Beta, mình mới để ý và bắt đầ