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

Sự Khác Nhau Giữa Domain và Hosting Là Gì?

Sự khác nhau giữa domain và hosting là gì? Bài này giải thích ngắn và dễ hiểu nh

Shared Hosting hay VPS Hosting: Lựa chọn nào dành cho bạn?

Bài viết giải thích rõ shared hosting và vps hosting là gì và hướng dẫn chọn lựa

Thay đổi Package Name của Android Studio dể dàng với plugin APR

Nếu bạn đang gặp khó khăn hoặc bế tắc trong việc thay đổi package name trong And

Lỗi không Update Meta_Value Khi thay thế hình ảnh cũ bằng hình ảnh mới trong WordPress

Mã dưới đây hoạt động tốt có 1 lỗi không update được postmeta ” meta_key=