Trình thu thập thông tin nodejs github
Hướng dẫn cách thu thập dữ liệu của một trang web bằng cách sử dụng Node. js, sử dụng một số gói hỗ trợ, tùy thuộc vào mức độ phức tạp của dữ liệu của trang web mà có những cách để thu thập thông tin khác nhau Show Bài viết này đã được đăng tại freetuts. net , không được sao chép dưới mọi hình thức. Thu thập thông tin là một kỹ thuật sử dụng kỹ thuật để lấy dữ liệu từ một trang web bằng cách tách dữ liệu ra khỏi một trang web nào đó, đây là một kỹ thuật được sử dụng rất nhiều, điển hình là Google bot. Kỹ thuật thu thập dữ liệu được sử dụng rộng rãi Mục đích lấy dữ liệu từ các trang web khi không được cung cấp 1 API cho phép lấy dữ liệu trực tiếp 1. Cần hiểu trước khi Thu thập dữ liệu trang web bằng NodeJSCó thể nói rằng crawl ( "cào" ) dữ liệu của 1 trang web là một kỹ thuật cho phép thu thập các dữ liệu có trên trang web. Công cụ thu thập dữ liệu sẽ truy cập vào đường dẫn cần lấy dữ liệu, sau đó tiến trình bóc tách để lấy dữ liệu về.Thu thập dữ liệu từ một trang web được sử dụng với nhiều mục đích. Có thể là tổng hợp tin tức từ các trang báo mạng để tạo ra 1 trang báo đầy đủ, hoặc lấy thời gian khóa biểu từ trang đăng ký học của nhà trường,. Nhưng về luật thì điều này không được phép, chúng ta cần phải xin phép chủ sở hữu website Bài viết này đã được đăng tại [free tuts. bọc lưới] Có rất nhiều cách để thu thập dữ liệu từ một trang web bằng NodeJS, tùy theo mức độ phức tạp của dữ liệu mà chúng ta sẽ có những cách khác nhau Hiện ứng dụng web này được xây dựng theo 2 loại chính đó là SPA (ứng dụng một trang) và MPA (ứng dụng nhiều trang), với mỗi loại sẽ có những cách thu thập thông tin khác nhau Điển hình là Freetuts được xây dựng theo kiểu truyền thống đó là MPA, khi bạn xem nguồn thì chúng ta sẽ thấy tất cả dữ liệu trong nguồn Còn Zingmp3 thì build theo kiểu SPA, khi view-source ra thì toàn thấy các script mã quỷ. Các trang SPA thì việc crawl đơn giản hơn rất nhiều vì họ sẽ nhận dữ liệu từ API, chúng ta chỉ cần gọi API là có thể lấy dữ liệu. MPA sẽ khó hơn bởi dữ liệu ở định dạng HTML nên việc bao bọc sẽ khó hơn, không những thế có những trang web dữ liệu cần lấy khá phức tạp 2. Thu thập dữ liệu trang web bằng NodeJSBài viết này sẽ thực hiện thu thập dữ liệu đối với các trang "hệ thống truyền tải" và điển trong ví dụ này là lấy tên và liên kết của một hướng dẫn trên trang freetuts. bọc lưới. Trước tiên, chúng ta cần chuẩn bị một vài công cụ hỗ trợ Hỗ trợ cài đặt công cụKhi thực sự thu thập dữ liệu hiện tại bằng NodeJS, chúng ta phải cài đặt một số công cụ, vì trang mình muốn thu thập dữ liệu là một trang MPA và dữ liệu cần tách rời khá đơn giản nên chỉ cần một vài gói như vậy
Để cài đặt chúng ta chỉ cần mở thiết bị đầu cuối và nhập dòng lệnh npm i cheerio request-promise Sau khi cài đặt hoàn tất, chúng ta sẽ đi vào phân tích sâu hơn trang web cần gỡ dữ liệu Vì đây là một trang với dữ liệu không quá phức tạp và dữ liệu không thay đổi theo thời gian thực nên mình sử dụng request-promise và cheerio, nhưng đối với những web phức tạp thì người ta sẽ dùng puppeteer. Bạn có thể tìm hiểu thêm về nó nhé ! Pupperteer khá mạnh trong khoản crawl này nhưng cũng khá nặng vì nó "vác" luôn hẳn cái trình duyệt vào Phân tích trang web cần thu thập thông tinChúng ta sẽ thực hiện thu thập dữ liệu ở các bài viết trong phần ReactJS cơ bản, với những dữ liệu cần thu thập là tên, miêu tả của hướng dẫn và các bài viết trong mỗi chương trình đó. Sau khi phân tích, chúng ta sẽ thấy vị trí của dữ liệu chúng ta cần lấy
Tiến hành thu thập dữ liệuSau khi cài đặt các gói và phân tích các thành phần chúng ta sẽ tiến hành thu thập dữ liệu. Mình sẽ làm việc với file Vì đây là một trang với dữ liệu không quá phức tạp và dữ liệu không thay đổi theo thời gian thực nên mình sử dụng request-promise và cheerio, nhưng đối với những web phức tạp thì người ta sẽ dùng puppeteer. Bạn có thể tìm hiểu thêm về nó nhé ! Pupperteer khá mạnh trong khoản crawl này nhưng cũng khá nặng vì nó "vác" luôn hẳn cái trình duyệt vào3. Trước tiên, chúng ta cần nhập các mô-đun cần thiết //file: index.js const rp = require("request-promise"); const cheerio = require("cheerio"); const fs = require("fs"); const URL = `https://freetuts.net/reactjs/tu-hoc-reactjs`; const options = { uri: URL, transform: function (body) { //Khi lấy dữ liệu từ trang thành công nó sẽ tự động parse DOM return cheerio.load(body); }, }; (async function crawler() { try { // Lấy dữ liệu từ trang crawl đã được parseDOM var $ = await rp(options); } catch (error) { return error; } /* Lấy tên và miêu tả của tutorial*/ const title = $("#main_title").text().trim(); const description = $(".entry-content > p").text().trim(); /* Phân tích các table và sau đó lấy các posts. Mỗi table là một chương */ const tableContent = $(".entry-content table"); let data = []; for (let i = 0; i < tableContent.length; i++) { let chaper = $(tableContent[i]); // Tên của chương đó. let chaperTitle = chaper.find("thead").text().trim(); //Tìm bài viết ở mỗi chương let chaperData = [] const chaperLink = chaper.find("tbody").find("a"); for (let j = 0; j < chaperLink.length; j++) { const post = $(chaperLink[j]); const postLink = post.attr("href"); const postTitle = post.text().trim(); chaperData.push({ postTitle, postLink, }); } data.push({ chaperTitle, chaperData, }); } // Lưu dữ liệu về máy fs.writeFileSync('data.json', JSON.stringify(data)) })(); Như đã phân tích ở trên thì mỗi bảng sẽ là một chương trình, do đó chúng ta sẽ sử dụng node index Và đây là kết quả nhận được sau khi thu thập dữ liệu thành công Trên đây là những kiến thức cơ bản về thu thập dữ liệu trang web bằng NodeJS. Mong bài viết này có thể giúp ích cho bạn trong việc lập trình với NodeJS, cảm ơn bạn đã quan tâm đến bài viết này |