Thứ Sáu, 6 tháng 12, 2013

HƯỚNG DẪN LẤY TIN TỨC TỰ ĐỘNG TỪ WEBSITE KHÁC BẰNG PHP

Project lấy tin tự động từ website khác, lấy nhiều tin cùng lúc, khai báo linh hoạt với từng site, lấy ảnh đại diện, tiêu đề, tóm tắt, miêu tả.
Tôi sử dụng thư viện simple html dom để xác định đối tượng trong cấu trúc DOM và lấy nội dung của trang. Các bạn xem thêm thư viện simple html dom tại http://simplehtmldom.sourceforge.net/. Sau khi các bạn xem thư viện simple html dom các bạn sẽ biết cách xác định một đối tượng, điều này rất quan trọng vì bạn sẽ sử dụng kỹ năng này để khai báo các mẫu cần lấy.
Lưu ý:
enable thư viện curl của PHP và allow_url_fopen = On.
Sau khi cài đặt các bạn nhớ phân quyền ghi cho thư mục cache và upload.
Tôi có gửi project trong file đính kèm, các bạn chỉ việc download về setup như một site bình thường là chạy được ngay.

HƯỚNG DẪN SỬ DỤNG

Sau khi các bạn setup xong vào trang chính (ví dụ trên máy tôi là crawler.minhtc).
Lấy tin
Đây là giao diện trang lấy tin. Gồm danh sách các mẫu lấy tin tôi đã khai báo sẵn. Các bạn có thể khai báo thêm tùy thích.
Bên phải của tên mẫu có đường link tới trang muốn lấy, các bạn có thể xem chi tiết.
Phần danh mục của tin tôi không làm phần quản trị mà để 2 danh mục là Danh mục tin tức vàMusic làm demo.

QUÁ TRÌNH LẤY TIN

Để lấy tin các bạn tich chọn mẫu cần lấy rồi nhấn nút Lấy tin. Quá trình lấy tin có thể nhanh hay chậm tùy thuộc vào trang cần lấy, tốc độ mạng …
Đang lấy tin
Sau khi lấy xong
khi lấy xong tin
Lúc này dữ liệu đã được lưu vào file temp và nút Chèn vào Database sẽ sẵn sàng để bạn ghi dữ liệu đã lấy vào database.
Sau khi nhấn nút Chèn vào Database các bạn vào trang Danh sách tin đã lấy (news.php) để xem các tin đã lấy về.
danh sách tin đã lấy
Nhấn vào chi tiết một tin để xem chi tiết.
chi tiết tin

QUẢN LÝ MẪU LẤY TIN

Các bạn vào trang Quản lý mẫu lấy tin (declaration_site.php).
danh sách mẫu lấy tin
Để cụ thể tôi sẽ lấy mẫu Showbiz Việt – Báo ngoisao.net làm demo.
Các bạn nhấn vào nút sửa mầu vàng bên phải mẫu.
chi tiết mẫu lấy tin
Thông tin có dấu * là bắt buộc phải nhập. Tôi sẽ giải thích từng trường thông tin:
  1. Tên mẫu: Các bạn đặt tên cho mẫu để dễ nhớ. VD: Showbiz Việt - Báo ngoisao.net
  2. Host: Là trang chính của trang cần lấy. VD: http://ngoisao.net/
  3. Url: Là đường dẫn cụ thể của trang cần lấy. VD: http://ngoisao.net/tin-tuc/showbiz-viet/
  4. Chèn vào bảng: Các bạn nhập tên bảng dữ liệu cần đưa dữ liệu vào. VD ở đây là bảng news
  5. Mẫu bao ngoài một đối tượng:
    Các bạn vào link cần lấy dữ liệu http://ngoisao.net/tin-tuc/showbiz-viet/
    vùng cần lấy dữ liệu
    Sau khi xác định được vùng cần lấy dữ liệu, các bạn xác định mẫu bao ngoài một đối tượng. Tôi định nghĩa mẫu bao ngoài một đối tượng là mẫu chứa đường link tới trang chi tiết tin và ảnh đại diện của tin.
    Để xác định mẫu bao ngoài một đối tượng các bạn sử dụng Firebug, trên FF hay Chrome , bấm F12 cho nó chạy, Firebug là 1 plugin của FF, Chrome thì có sẵn. Sau đó nhấn chuột phải vào đối tượng cần xem mẫu và chọn Kiểm tra phần tử (Inspect Element With Firebug). Hoặc các bạn có thể làm như sau: Nhấn F12
    Với Chrome Trong tab Elements các bạn nhấn vào nút Select an element in the page to inspect it (hình kính lúp bên dưới vị trí thứ 3 từ trái sang)
    Với FF các bạn nhấn nút Select an element in the page to inspect ở vị trí thứ 2 từ trái sang của Firebug.
    sau đó di chuột vào vùng mẫu bao ngoài một đối tượng mà tôi đã khoanh mầu xanh ở hình trên. Các bạn sẽ thấy như hình dưới:
    mẫu bao ngoài một đối tượng
    Các bạn để ý thấy mẫu bao ngoài một đối tượng sẽ có dạng ul.news li

  6. Mẫu liên kết một tin:
    Là đường link tới trang chi tiết của tin cần lấy nằm trong mẫu bao ngoài một đối tượng đã xác định ở trên. Ở bước này các bạn chỉ cần xác định tới thẻ a chứa liên kết là được. Cách làm tương tự như trên ta sẽ thấy trong vùng mẫu bao ngoài một đối tượng có 2 liên kết tới trang chi tiết
    mẫu liên kết một tin
    vì vậy ta có 2 cách xác định Mẫu liên kết một tin như sau:
    a.ptw
    h3 a
    Cả 2 cách trên đều được.
  7. Chèn vào danh mục:
    Là danh mục cần lấy tin trên hệ thống của bạn. VD: Danh mục tin tức
  8. Số trang cần lấy:
    Ví dụ các bạn muốn lấy tin ở trang 1 và trang 2 trong mục http://ngoisao.net/tin-tuc/showbiz-viet/ lúc này đường dẫn phần Url sẽ phải thay đổi một chút thành:
    http://ngoisao.net/tin-tuc/showbiz-viet/?p=*
    và trong mục này các bạn điền: 1-2
    Ví dụ các bạn muốn lấy 9 trang từ 1 tới 9 thì điền "1-9" khi lấy hệ thống sẽ thay ký tự "*" trên url lần lượt thành các trang từ 1 tới 9.

  9. Mẫu ảnh đại diện:
    Là ảnh đại diện của tin. Cách xác định mẫu giống như mục 5 và mục 6.
    Vậy ở ví dụ này mẫu ảnh đại chỉ cần ghi là img.
    Lưu ý: cách xác định mẫu liên kết một tin, mẫu ảnh đại diện đều tính từ bên trong mẫu bao ngoài một tin.

  10. Thư mục chứa ảnh đại diện:
    Là đường dẫn chứa ảnh đại diện của tin trên hệ thống khi đã lấy về.

  11. Thay thế đường dẫn ảnh trong nội dung:
    Là đường dẫn ảnh trong phần chi tiết một tin.
    đường dẫn ảnh trong trang chi tiết một tin
    Các bạn thấy đường dẫn ảnh ở đây là đường dẫn trên server của trang cần lấy. Khi lấy về ảnh này sẽ không hiện thị được vì thiếu phần tên miền. Vậy ta phải thêm phần têm miền vào đường dẫn ảnh. Trong ví dụ này mục Thay thế đường dẫn ảnh trong nội dung các bạn điền như sau:
    /Files/ ==> http://ngoisao.net/Files/

  12. Bắt đầu và kết thúc vùng cần lấy:
    Đây là tùy chọn các bạn có thể điền hoặc không. Để quá trình phân tích trang được nhanh hơn nghĩa là thời gian lấy tin nhanh hơn các bạn xác định đoạn đầu và đoạn cuối bao vùng cần lấy dữ liệu. Ở đây không cần xác định mẫu mà chỉ là một đoạn html của trang cần lấy.
    Trong ví dụ này các bạn có thể điền như sau:
    class="navigationDetail" ==> class="divTag"
Sau khi điền xong các thông tin trên các bạn nhấn nút Ghi lại
Tiếp đến các bạn nhấn vào nút Chi tiết để sang phần khai báo các trường thông tin chi tiết cần lấy trong trang chi tiết một tin.
Ở đây ta sẽ có 3 trường thông tin cần khai báo là:
  1. Name:
    Là tiêu đề tin.
    - Mẫu cần lấy. VD: h1.Title
    - Mẫu đối tượng cần xóa. VD: Trong ví dụ này không có đối tượng cần xóa
  2. Brief:
    Là phần tóm tắt tin.
    - Mẫu cần lấy. VD: h2.Lead
    - Mẫu đối tượng cần xóa. VD: Trong ví dụ này không có đối tượng cần xóa
  3. Description:
    Là phần chi tiết tin.
    - Mẫu cần lấy. VD: .detailCT
    - Mẫu đối tượng cần xóa. VD:
    .topDetail,h1,h2,.RelatedLeadSubject,.detailNS,.relateNewsDetail
Sau khi điền xong các bạn nhấn nút Ghi lại.
Vậy là ta đã khai báo xong một mẫu lấy tin. Các bạn ra trang lấy tin để thử.
Để hiểu thêm và cách viết code lấy tin tự động sử dụng thư viện simple html dom các bạn tham khảo bài viết: http://truongminhtrung.blogspot.com/2013/12/huong-dan-viet-code-lay-tin-tu-ong-bang.html

Chúc các bạn thành công!
tải file đính kèm tại đây

Theo minhtc

7 nhận xét:

  1. Cám ơn bạn, bài viết rất chi tiết và dễ hiểu.
    Mình đang làm thử theo hướng dẫn của bạn. có gì mình post câu hỏi lên đây nha.

    website ban hang php - cd hay - cau truc website ban hang

    Trả lờiXóa
  2. Mình đã thực hành theo hướng dẫn của bạn vả thành công.

    website ban hang joomla | website bán hàng joomla

    Trả lờiXóa
  3. mấy cái code này khá rắc rối, nhưng cam ơn bạn đã chia sẻ
    loa hội trường Soundking

    Trả lờiXóa
  4. Bạn ơi cho mình hỏi là trong phần chi tiết nếu muốn khai báo description ko phải là class mà là id thì phải điền gì vào?

    Trả lờiXóa
  5. Khi cài đặt, nó báo lỗi "could not connect to database". Mình đã import database crawler.sql vào nhưng không biết làm sao để kết nối đến database nay. Nhờ bạn hướng dẫn giúp mình với. Xin cảm ơn!

    Trả lờiXóa
  6. Nhận xét này đã bị quản trị viên blog xóa.

    Trả lờiXóa