Góc chém gió, nói điêu: “Chỉ gà mới không biết Crawl Web Data?!!”

Khuyến cáo

  • Bài viết không dành cho: Người già, trẻ con, người xấu trai, người dị ứng với ngôn từ nhí nhố, bất lịch sự và người kỳ vọng sẽ học được gì nguy hiểm từ bài viết 😉 .
  • Ai nên đọc tiếp: các Developer, những người đẹp trai 😳 , người cay cú khi đọc cái tít 😆 , người đang rảnh không còn gì bổ ích để đọc.
  • Nội dung bài viết: nói lan man, vòng vo quanh vấn đề CWD(crawl web data), tập trung vào bối cảnh, cách triển khai, các vấn đề tác giả gặp phải. Với mục đích cuối cùng chỉ là để chém gió 😀

 

Đôi lời tác giả

Tiêu đề bài viết chỉ mang tính giật tít, nội dung thì lởm khởm, các kiến thức trong bài viết đều không chính thống, chỉ là kinh nghiệm cá nhân em, cho nên…

Bác nào thấy hay thì comment, không hay thì cũng comment, còn không comment thì… thôi 😀 . Gạch đá thoải mái em cân hết 😎

nemda1

 

Uki, vào đề. Vậy túm cái váy lại CWD là con khỉ gì nhỉ?

CWD là…(Sau vài giờ google search) là lấy thông tin từ một hay nhiều trang web nào đó, đại loại thế. Nói nguy hiểm ra thì cái CWD này còn thuộc vào cả Data Mining đấy 😐

Thông tin lấy về thường sẽ dưới dạng text(Em mới lấy được text thôi chứ ảnh với video em chưa làm bao h :D). Text đó là nội dung trang web, các link tới web con…

Nghe có vẻ đơn giản nhỉ 😕

 

Hơ chờ đã, nhưng mà sao phải làm cái CWD cho mệt, vào web đó rồi lấy tay mà copy có nhanh hơn không 😛 ?

Chẹp, uh thì có khi nhanh hơn đó 😉

Cơ mà, giả dụ, khách hàng muốn bạn vào trang http://www.lazada.vn/ , lấy ra tất cả tên sản phẩm, giá, phân loại, số sao đánh giá của người dùng… theo từng sản phẩm thì sao 😕 (Tại thằng khách hàng rảnh cần thông tin này để thống kê thống kiếc, xong nghiên cứu thị trường ý mà). Nếu copy bằng tay từng sản phẩm thì… sưng tay mất 😉

Trong trường hợp này ta phải dùng cái CWD này để làm cho nhanh nhé 😀 , để có thời gian còn gái gú nhậu nhẹt làm việc khác chứ 😉

 

À há, cơ mà làm sao code ra được một con CWD đây 🙄 , nếu khó quá thì thôi khỏi làm nhé, đi copy tay cho dễ 😆

 

Crawl_efficiency_FI

Code cái này dễ như ăn kẹo ae ạ, nhoằng cái là xong 😉

Nói nhanh thì chỉ cần đủ ISDT 😆 , ISDT thực ra chỉ là 4 tầng “em” code ra để làm cái CWD này => tức là nếu các bác có cách code khác thì cũng ok nhé, đây chỉ là cách thiết kế theo chủ ý cá nhân em thôi 😀

ISDT gồm :

  • Inspector: input là web page link, html selector, xpath, regex… ; output là text của một html object trên web page đó (Tầng này làm thêm vài chức năng nhỏ nữa như fake IP chả hạn >.<).
  • Spider: gọi lại tầng Inspector, xử lí lấy thông tin trên một hoặc nhiều trang theo một cấu trúc nhất định như paging, recursive…(Đây là tầng em phải code nhiều nhất 🙁 )
  • Data(viết tới đây thấy mình đặt tên ngu quá, các bác thông cảm 😀 ): lo việc ghi dữ liệu ra file, insert vào data base…
  • Timer: Cái này là để con CWD của mình tự động chạy 😳 (Thường 1 web page lớn chứa nhiều thông tin thì có khi chạy mất nhiều ngày mới xong. Mình setting để mỗi ngày nó tự bật lên và chạy vào 1 khung giờ nhất định, tránh chiếm tài nguyên sever của khách 😀 nếu khách hàng sida không cho mình sever riêng)

Hự sao nhiều thế, thế này mà bảo dễ ah, code bao giờ mới xong 😯

spiders-GS

Keep calm pls! 😆

Rảnh mới đi code đống này từ đầu 😐 mà kể cả rảnh cũng gái gú chơi bời làm việc khác chứ. Nên là chúng ta sẽ kế thừa nó từ các thư viện, mà search google thì nhan nhản ra 😳

Cụ thể với từng tầng như nào?

Inspector

Em hay dùng thư viện Goutte, cái này phải cảm ơn một bác khác gợi ý, chứ đi mò với test từng cái trên mạng thì cũng mệt. Chỉ cần dùng composer cài vào, gọi lên và dùng, rảnh nữa thì extend nó ra rồi sửa theo ý mình 😉 , bọn này có cho ví dụ cụ thể rồi, bắt chước thôi là được 😆

Spider

Cái này quanh đi quẩn lại chỉ có 2 nghiệp vụ web mà ai cũng biết, đó là paging và recursive.

Với paging mình chỉ cần biết url của trang đầu tiên, các trang sau thì thêm số trang vào url là xong.

Còn recusive thì lại quá dễ, bác xác định được 3 thứ root page, selector của child page và điều kiện dừng đệ quy là xong . Dễ mà 😆

Data

Đáng ra là cái này phải tự viết, vì chỉ có ghi file và insert db thôi. Cơ mà em nhác, nên em lấy luôn ông Slim PDO để insert db cho tiện 😀

Timer

Tới đoạn này thì chả phải code gì nữa rồi, bác chỉ dùng hàm crontab của linux để cho nó tự chạy là được.

Muốn nó dừng chạy vào 1 giờ nhất định, bác code thêm đoạn check time là được, chắc 3 dòng là kịch đất 😕

Holy F*cking sh*t ! Ra là nãy giờ chỉ toàn hướng dẫn copy code thôi ah, nhảm v*i 👿

No no no, không nhảm đâu nhé 😀

Những cái vừa nêu là phần chính, nhưng lại không phải phần tốn nhiều công sức nhất của cái CWD này.

Chúng ta phải làm thêm một vài em Helper, để xử lý các chức sau nữa:

Loger: tất nhiên rồi, phải có log để đang chạy có lỗi mà còn debug chứ.

Resumer: Chạy cái CWD này 10 ngày mới xong, lỡ mà ngày thứ 9 mất điện sever ngỏm giữa chừng, không có resume lại được thì chạy lại từ đầu chắc @@.

IPFaker: hờ hờ, cái CWD của mình cứ request liên tục tới web của người ta, nếu người ta có cài tường lửa thì nó sẽ hiểu là mình đang DDOS nó, và chặn mình, nên tất nhiên là phải fake được IP rồi, mình thường dùng nhiều proxy thay phiên nhau request.

Chẹp, hết rồi, ờ thì cũng chỉ có thế thôi 😆

Đọc đến đây thì cũng nể bác vì độ kiên nhẫn rồi. Cám ơn vì đã lãng phí time để đọc bài chém gió của em nhé! 😳

Mọi ý kiến đóng góp hay gạch đá các bác để lại ở phần comment nhá 😈

2 Comments

  1. Thanh Hồ

    Bài viết như cơ mưa rào giữa trời nắng hạn, mình đang làm đồ án liên quan đến dữ liệu. cảm ơn thớt
    Thanh from ZeFro blog

  2. Linh

    Ông cho hỏi, thời gian giản cách giữa 2 lần Crawl khoảng bao nhiêu nhỉ, để 1s mà bị báo Link 508

Leave a Reply

Your email address will not be published. Required fields are marked *