Chiều hôm qua trong lúc dạo vòng các blog mà tôi biết (không biết có cách nào thống kê toàn bộ blog về ngành IT ở Việt Nam không nhỉ) thì có đọc được một bài viết về chủ đề crawl dữ liệu bằng cách dùng thư viện HTMLAgilityPack và Fizzler trong C#. Tôi có học về C# chút ít xíu xiu. Nhưng hiện tại tôi vẫn chưa biết dùng hai thư viện đó. Đọc bài blog đó xong thì cũng có hiểu chút chút về cách xài, và thấy – cá nhân thôi – có vẻ như hơi khó xài hơn là cách tôi làm với PHP.

Ngày xưa, lâu lắm rồi, cỡ lúc tôi học lớp 6 thì tôi cũng từng nghe và sử dụng thử web crawler. Nhu cầu khi ấy là do tôi không có mạng Internet lắp sẵn ở nhà truy cập phà phà như nhiều bạn trẻ bây giờ. Mấy bạn sướng từ trong trứng nhưng tôi thấy mấy bạn chỉ biết dùng nó sai cách. Có thể mình chưa biết gì, nhưng mình phải tận dụng nó mà học hỏi từ từ. Chậm thì đã sao? Không sao cả! Chậm mà hiểu sâu và nhớ hoài, biến nó thành điều hiển nhiên với mình, tựa như đánh răng mỗi sáng thức dậy, bạn có cần phải mở manual lên đọc cách hướng dẫn đánh răng không? Hay mỗi sáng đều phải nhờ cha/mẹ chỉ dạy cách đánh răng như lần đầu khi nhỏ? Không! Chỉ một lần thôi, sau đó tự nhớ làm hoài. Kiến thức nếu đam mê, thì biến nó từ cái xa lạ với mình, với mọi người, thành điều hiển nhiên, gặp là xử nhanh đánh gọn không phải “uh, uhm, hmm…đây là một phạm trù triết học xa lạ với tao” =))))))))))))

Quay lại việc web crawler – hay còn nói nôm na là đi cào dữ liệu. Ngày xưa tôi không có mạng, mỗi lần muốn xài phải dành dụm 2000VNĐ có 40 phút, 3000VNĐ có 1 tiếng để ngồi net đào bới thông tin cần đọc, cần xem. Hồi đó mê đọc Conan, Đôrêmon (mãi mãi với tôi chỉ có Đôrêmon chứ không có Doraemon nhé! Thế hệ tôi chỉ có Đôrêmon thôi). Mà ra tiệm ngồi đọc thì thời gian không đủ, phải tải về. Tải về bằng cách Save as cả trang web thành file HTML hay HTM là thảm hoạ! Thiếu này thiếu kia nhiều khi về chỉ có cái bộ xương (backbone) của HTML còn phần da thịt (CSS) thì chẳng thấy đâu! 😥 Thế là lên mạng tìm tòi cách tải hình về hàng loạt. Lúc đầu dùng IDM tải :v haha… Cũng thất bại vì dốt tiếng Anh. Sau đó tìm được cái công cụ chuyên crawler. Hơi chậm nhưng cũng ok.

OK! Đó là chuyện của quá khứ, xưa rồi cho qua. Sống mà cứ chằm chằm quá khứ thì sao tiến lên được.

Lòng người là cánh chim đêm. Nó âm thầm chờ đợi điều gì, rồi khi thời cơ đến, nó sẽ vút bay đi thẳng tắp về phía đó.

—– Haruki Murakami —–

Tazaki Tsukuru không màu và những năm tháng hành hương

Sau khi đọc bài blog thì tôi cũng thử tìm hiểu cách làm xem sao. Dĩ nhiên chưa xài HTMLAgilityPack và Fizzler liền, hai cái đó để từ từ tìm hiểu. Lượn qua Python xem demo, có một user người Hàn Quốc đăng trên Youtube và cào được hình từ trang web đích, sau đó lưu hình vào thư mục chỉ định luôn! Cool… Không có hướng dẫn, không có code sample….. ;____; Chưa tự học Python nữa, mới bập bõm vài cái cú pháp căn bản thôi, bỏ qua.

Quay sang PHP, ngôn ngữ web luôn nên có vẻ hợp đó. Xem thử hướng làm thế nào, toàn thấy kết quả là StackOverflow -_- Okie, đọc luôn, cũng bổ ích mà. Sau khi lượn gần 40 phút với đủ loại kết quả ngắn dài, cuối cùng lờ mờ hiểu ra là nên xài thư viện PHP Simple HTML DOM Parser để làm.

Thư viện này sẽ giúp ta tìm trong link mà mình muốn lấy hình ảnh (hoặc bất kỳ đối tượng nào bạn muốn) và lưu nó vào một biến. Sau đó, ta lấy tên của mình và bỏ vào hàm file_put_contents() để lưu nó vào thư mục mình chỉ định. Khuyến cáo xem kĩ đường dẫn folder nơi lưu hình, đề phòng trường hợp làm đúng hết nhưng không lưu được vì chưa có thư mục hoặc đường dẫn sai. Tốt nhất nên để chung tất cả trong một folder.

craw.PNG

Do để demo và cá nhân sử dụng, nên tôi không quan trọng hình thức lắm. Thật ra lúc đầu nó thậm chí còn không có giao diện nữa kìa, chỉ chạy rồi vào thư mục chờ lấy hình thôi là xong.

Code mẫu tôi cũng upload lên GitHub cá nhân, bạn nào quan tâm có thể vào đây để lấy về tham khảo. Vì GitHub là cộng đồng nhiều người xài trên khắp thế giới nên tôi comment code trong đó bằng tiếng Anh.

Có thể xem tham khảo cách thức thực hiện tại đây (video này là phiên bản cũ), còn show hình lên web.

Có thể tham khảo cách sử dụng thư viện tại đây.

VÕ TÌNH THƯƠNG

votinhthuong9@gmail.com

Advertisements