09/05/2016

Crawl với node.js như thế nào: ví dụ Sose.xyz

X: "Em có cách nào lấy tất cả hình trên web này không?"
Tui: "Web nào anh"
X: "Sose.xyz"

Idea ở đây là crawl hình ảnh từ sose.xyz sau đó create API để load trên app.

Mở đầu: 

Mình mở source trang này xem thì thấy toàn là link của tumblr, đoán chắc là blog trên tumblr nên view dns record với search thử xem thì quả đúng.


Chính nó ! 


Thật ra thì nó host ở đâu thì không quan trọng mấy :v

Mình trở lại trang để xem cách load ảnh như thế nào. Thì ra nó load ảnh bằng AJAX, nếu scroll thì sẽ load thêm xuống dưới mà không phân trang. Vậy problem ở đây là phải tìm ra được pattern url phân trang.

Sử dụng Chrome Developer Tools phần Network ta bắt được link ngay. Mình được end page = 2048 => page in range(0,2048)



Có pattern thì chẳng còn gì quan ngại nữa, view source xem link Full HD không che ở chỗ nào :3




Mình code bằng Nodejs sử dụng request để load html, cheerio để load DOM với async để control flow

Code viết tương đối dễ hiểu nên mình không có comment nhé !

Trong gist gồm 1 file là GetLink dùng để get link save về 1 file text, sau đó file DownloadFile sẽ download dựa vào list file text. Các bạn có thể gộp chung 2 bước này cũng được.

Không kém phần quan trọng là list link đã get:
https://gist.github.com/toanalien/6ec6a61aa88155554167e8d9b1ca91e9



Next step: dùng API của GG Photo upload lên, viết 1 service làm proxy để load ảnh về, chèn thêm middleware authenticate để tránh mấy bác kéo treo băng thông.


1 nhận xét:

  1. Haha, muốn lấy ảnh thì bảo mình share cho, mình là chủ của cái Tumblr đó đây.

    Trả lờiXóa