Trình thu thập dữ liệu web php github
Có thể các bạn đã nghe nói đến kỹ thuật thu thập dữ liệu trang web ở đâu rồi đúng không? Show
Trình thu thập kỹ thuật có rất nhiều ứng dụng thực tế, có thể kể đến một số ý tưởng như tưởng tượng. Xây dựng ứng dụng đọc báo bằng cách thu thập dữ liệu trang web từ các báo lớn, thu thập thông tin tuyển dụng từ Facebook. v. v… Để tạo trình thu thập dữ liệu web có rất nhiều cách và cũng có vô số khung hỗ trợ. Ví dụ như Python thì có Scrapy rất nổi tiếng. Tuy nhiên, do mình chỉ biết có Nodejs thôi, nên bài viết này chúng ta sẽ cùng nhau tìm hiểu kỹ thuật crawler dữ liệu website sử dụng kỹ thuật phân tích cú pháp DOM bằng Nodejs Trước hết, để các bạn khỏi lăn tăn, Vtalking sẽ cùng các bạn đang muốn tự học lập trình xem trang web thu thập thông tin là gì nhé. Nội dung chính của bài viết
#Crawl dữ liệu trang web là gì?Nói một cách dễ hiểu, thì trình thu thập dữ liệu web là kỹ thuật thu thập dữ liệu từ các trang web trên mạng theo đường liên kết cho trước. Trình thu thập thông tin web sẽ truy cập vào đường liên kết và tải xuống toàn bộ dữ liệu cũng như tìm kiếm thêm các đường liên kết bên trong để tải xuống ghi chú Nếu trong quá trình thu thập dữ liệu quá trình, bạn chỉ lọc những thông tin cần thiết cho nhu cầu câu hỏi của bạn thì người ta gọi là web Scaping Hai khái niệm web crawler và web scraping về cơ bản giống nhau, có khác nhau thì cũng thì tí xíu thôi à Kỹ thuật thu thập dữ liệu từ trang webVí dụ với trang shopee. com, kỹ thuật thu thập dữ liệu web sẽ thu thập toàn bộ nội dung của trang web này (tên sản phẩm, mô tả sản phẩm, giá sản phẩm, hướng dẫn sử dụng, đánh giá và bình luận về sản phẩm,…). Tuy nhiên, web scraping thì chỉ có thể thu thập một số thông tin cần thiết với bạn như bạn. chỉ thu thập giá sản phẩm để làm ứng dụng so sánh giá Những dữ liệu khi thu thập thông tin có thể được lưu trữ trong cơ sở dữ liệu của bạn để phục vụ cho việc phân tích hoặc sử dụng với các mục đích khác nhau Lưu ý. việc thu thập dữ liệu từ một trang web không thể được phép từ trang web chủ đó. Về luật, bạn cần phải xin phép chủ sở hữu trang web. Mình không chịu trách nhiệm nếu có vấn đề gì phát sinh nhé 🙂 #Demo trang web trình thu thập thông tin kỹ thuậtĐể minh họa cho kỹ thuật thu thập dữ liệu này, mình sẽ hướng dẫn các bạn xây dựng một bot lừa đảo thu thập dữ liệu từ trang web Scotch. io (một trang web nổi tiếng về dạy học lập trình) Chúng ta sẽ thu thập những dữ liệu về hồ sơ của một tác giả, cũng như những bài viết của anh ấy. Sau đó, xây dựng RESTful API để trả về những dữ liệu đó, mục đích sử dụng cho ứng dụng của chúng ta sau này Dưới đây là ảnh chụp màn hình ứng dụng demo được tạo dựa trên API mà chúng tôi đã xây dựng trong bài viết này Yêu cầu số lượng trước khi thực hiệnNhư mình đã nói, kỹ thuật thu thập dữ liệu có thể được thực hiện bởi hầu hết các ngôn ngữ lập trình hiện hỗ trợ HTTP, XML và DOM như. PHP, Python, Java, Javascript… Trong bài viết này, mình sẽ sử dụng Javascript trên môi trường Nodejs để thực hiện crawling. Vì vậy, bạn cần có kiến thức cơ bản về Javascript để có thể đọc bài viết dễ dàng hơn và thực hiện thu thập dữ liệu trang web nodejs Nếu bạn chưa biết gì về Nodejs hay Javascript thì có thể tham khảo những bài viết này trước
Trước khi bắt đầu code theo bài viết này, bạn cũng cần phải cài đặt sẵn Nodejs và Npm trong máy của mình
Ngoài ra, mình cũng có sử dụng một số thư viện bên thứ 3 (Phụ thuộc) hỗ trợ việc thu thập dữ liệu như
Ok, if all have available, we started to thực hiện viết thu thập dữ liệu thôi #Xây dựng trang web trình thu thập dữ liệuVẫn như mọi khi, để các bạn có thể dễ dàng đọc và làm theo, mình sẽ cố gắng viết chi tiết nhất có thể. Có chỗ nào không hiểu thì phải hỏi ngay nhé 1. Cài đặt phụ thuộcĐầu tiên, các bạn tạo một dự án Nodejs mới, sau đó cài đặt các thư viện cần thiết cho dự án # Create a new directory mkdir scotch-scraping # cd into the new directory cd scotch-scraping # Initiate a new package and install app dependencies npm init -y npm install express morgan axios cheerio lodash 2. Cài đặt máy chủ web với ExpressChúng ta sẽ tạo một máy chủ http đơn giản bằng ExpressJS. Đơn giản là tạo máy chủ tệp mới. js trong thư mục gốc của dự án, sau đó thêm đoạn mã sau /_ server.js _/ // Require dependencies const logger = require('morgan'); const express = require('express'); // Create an Express application const app = express(); // Configure the app port const port = process.env.PORT || 3000; app.set('port', port); // Load middlewares app.use(logger('dev')); // Start the server and listen on the preconfigured port app.listen(port, () => console.log(`App started on port ${port}.`)) Sau đó, bạn chỉnh sửa tệp /_ server.js _/ // Require dependencies const logger = require('morgan'); const express = require('express'); // Create an Express application const app = express(); // Configure the app port const port = process.env.PORT || 3000; app.set('port', port); // Load middlewares app.use(logger('dev')); // Start the server and listen on the preconfigured port app.listen(port, () => console.log(`App started on port ${port}.`))6 để chạy máy chủ đơn giản hơn. Thêm đoạn mã sau "scripts": { "start": "node server.js" } With đoạn mã trên thì từ này, thay vì phải nhập. /_ server.js _/ // Require dependencies const logger = require('morgan'); const express = require('express'); // Create an Express application const app = express(); // Configure the app port const port = process.env.PORT || 3000; app.set('port', port); // Load middlewares app.use(logger('dev')); // Start the server and listen on the preconfigured port app.listen(port, () => console.log(`App started on port ${port}.`))7 để khởi động mã, bạn chỉ cần nhập. /_ server.js _/ // Require dependencies const logger = require('morgan'); const express = require('express'); // Create an Express application const app = express(); // Configure the app port const port = process.env.PORT || 3000; app.set('port', port); // Load middlewares app.use(logger('dev')); // Start the server and listen on the preconfigured port app.listen(port, () => console.log(`App started on port ${port}.`))8 Thực ra, nếu chỉ có vậy thì việc phải thêm kịch bản vào /_ server.js _/ // Require dependencies const logger = require('morgan'); const express = require('express'); // Create an Express application const app = express(); // Configure the app port const port = process.env.PORT || 3000; app.set('port', port); // Load middlewares app.use(logger('dev')); // Start the server and listen on the preconfigured port app.listen(port, () => console.log(`App started on port ${port}.`))6 cũng không có nhiều lợi ích lắm phải không? . sao chép tệp cấu hình, tạo đoạn mã bất kỳ trước khi khởi động máy chủ thì bạn cũng chỉ phải cấu hình trong đoạn mã bắt đầu đoạn này thôi >>> Nên đọc. Cách phân tích Json Javascript chuẩn nhất 3. Tạo Request và Response HelperỞ phần này, chúng ta sẽ tạo một số hàm để tái sử dụng trong toàn bộ ứng dụng Tạo mới một tệp "scripts": { "start": "node server.js" }0 trong thư mục gốc của dự án________số 8 Đoạn mã trên, chúng ta mới chỉ nhập những thư viện cần thiết cho helper mà thôi. Giờ là lúc viết nội dung cho helper Đầu tiên, chúng ta sẽ tạo một công việc để trả về dữ liệu JSON cho người yêu cầu đơn giản hơn /_ app/helpers.js _/ /** **_ Handles the request(Promise) when it is fulfilled _** and sends a JSON response to the HTTP response stream(res). */ const sendResponse = res => async request => { return await request .then(data => res.json({ status: "success", data })) .catch(({ status: code = 500 }) => res.status(code).json({ status: "failure", code, message: code == 404 ? 'Not found.' : 'Request failed.' }) ); }; Ví dụ các cách sử dụng hàm này như sau /_ server.js _/ // Require dependencies const logger = require('morgan'); const express = require('express'); // Create an Express application const app = express(); // Configure the app port const port = process.env.PORT || 3000; app.set('port', port); // Load middlewares app.use(logger('dev')); // Start the server and listen on the preconfigured port app.listen(port, () => console.log(`App started on port ${port}.`))0 Mình sẽ giải thích cụ thể hơn nhé. Khi máy chủ nhận được yêu cầu. NHẬN/đường dẫn. Chúng ta giả định làm abcxyz gì đó và có kết quả là [1, 2, 3, 4, 5]. Lúc này hàm sendResponse() sẽ hỗ trợ trả lại JSON cho người yêu cầu /_ server.js _/ // Require dependencies const logger = require('morgan'); const express = require('express'); // Create an Express application const app = express(); // Configure the app port const port = process.env.PORT || 3000; app.set('port', port); // Load middlewares app.use(logger('dev')); // Start the server and listen on the preconfigured port app.listen(port, () => console.log(`App started on port ${port}.`))1 Tiếp theo là hàm lấy html từ một url bất kỳ /_ server.js _/ // Require dependencies const logger = require('morgan'); const express = require('express'); // Create an Express application const app = express(); // Configure the app port const port = process.env.PORT || 3000; app.set('port', port); // Load middlewares app.use(logger('dev')); // Start the server and listen on the preconfigured port app.listen(port, () => console.log(`App started on port ${port}.`))2 Đúng như tên gọi của nó, khi bạn gọi hàm này thì kết quả sẽ là toàn bộ html của URL. Từ “đống” HTML này, chúng ta sẽ tách rời để lấy những dữ liệu cần thiết Trong file helper. js này còn nhiều hàm nữa, nhưng do long quá mình không tiện show ra đây. Bạn cứ lấy nguồn về dùng, nếu có chỗ nào không hiểu thì để lại bình luận bên dưới nhé 4. Tiến hành tạo dữ liệu trang web trình thu thập thông tin tệp từ scotchTất cả các thủ tục cần thiết để công việc thu thập dữ liệu đã chuẩn bị hoàn tất. Giờ là lúc chúng ta viết các hàm thu thập dữ liệu, phân tích dữ liệu từ trang web Tạo tệp "scripts": { "start": "node server.js" }1 trong thư mục ứng dụng và thêm đoạn mã sau /_ server.js _/ // Require dependencies const logger = require('morgan'); const express = require('express'); // Create an Express application const app = express(); // Configure the app port const port = process.env.PORT || 3000; app.set('port', port); // Load middlewares app.use(logger('dev')); // Start the server and listen on the preconfigured port app.listen(port, () => console.log(`App started on port ${port}.`))4 Trong đó, cần lưu ý đến hàm scotchRelativeUrl(). Hàm này có mục đích là tự động trả về URL đầy đủ khi chúng ta chỉ cần truyền vào URL tham số Ví dụ /_ server.js _/ // Require dependencies const logger = require('morgan'); const express = require('express'); // Create an Express application const app = express(); // Configure the app port const port = process.env.PORT || 3000; app.set('port', port); // Load middlewares app.use(logger('dev')); // Start the server and listen on the preconfigured port app.listen(port, () => console.log(`App started on port ${port}.`))5 3. Trích xuất dữ liệu từ trang webTrong phần này, chúng ta sẽ tiến hành trích xuất những thông tin cần thiết như thiết yếu.
Tuy nhiên, do bài viết quá dài nên mình sẽ chỉ giải thích cho phần đầu tiền (lấy link xã hội của một tác giả). Các phần còn lại các bạn tham khảo trong source code nhé Để có thể trích xuất dữ liệu social link của một ai đó trên scotch.io, mình sẽ định nghĩa một hàm extractSocialUrl() trong file scotch.js. Mục đích của hàm này là trích xuất tên mạng social, URL trong thẻ . Mình ví dụ một DOM về thể trong profile của một tác giả trên scotch. /_ server.js _/ // Require dependencies const logger = require('morgan'); const express = require('express'); // Create an Express application const app = express(); // Configure the app port const port = process.env.PORT || 3000; app.set('port', port); // Load middlewares app.use(logger('dev')); // Start the server and listen on the preconfigured port app.listen(port, () => console.log(`App started on port ${port}.`))0 Khi gọi hàm "scripts": { "start": "node server.js" }2 thì kết quả trả về là một kiểu đối tượng như sau /_ server.js _/ // Require dependencies const logger = require('morgan'); const express = require('express'); // Create an Express application const app = express(); // Configure the app port const port = process.env.PORT || 3000; app.set('port', port); // Load middlewares app.use(logger('dev')); // Start the server and listen on the preconfigured port app.listen(port, () => console.log(`App started on port ${port}.`))1 Đoạn mã hoàn chỉnh của hàm t làm giàu liên kết xã hội xuất ra như sau /_ server.js _/ // Require dependencies const logger = require('morgan'); const express = require('express'); // Create an Express application const app = express(); // Configure the app port const port = process.env.PORT || 3000; app.set('port', port); // Load middlewares app.use(logger('dev')); // Start the server and listen on the preconfigured port app.listen(port, () => console.log(`App started on port ${port}.`))2 Mình sẽ giải thích một chút
Ví dụ cụ thể cho dễ hiểu nhé. hàm này sẽ trả về các lớp liên quan đến xã hội /_ server.js _/ // Require dependencies const logger = require('morgan'); const express = require('express'); // Create an Express application const app = express(); // Configure the app port const port = process.env.PORT || 3000; app.set('port', port); // Load middlewares app.use(logger('dev')); // Start the server and listen on the preconfigured port app.listen(port, () => console.log(`App started on port ${port}.`))3 Tiếp theo, để trích xuất được tên mạng xã hội thì sử dụng hàm "scripts": { "start": "node server.js" }4 /_ server.js _/ // Require dependencies const logger = require('morgan'); const express = require('express'); // Create an Express application const app = express(); // Configure the app port const port = process.env.PORT || 3000; app.set('port', port); // Load middlewares app.use(logger('dev')); // Start the server and listen on the preconfigured port app.listen(port, () => console.log(`App started on port ${port}.`))4 Cuối cùng là trích xuất URL từ thuộc tính href. Kết quả thu được như sau /_ server.js _/ // Require dependencies const logger = require('morgan'); const express = require('express'); // Create an Express application const app = express(); // Configure the app port const port = process.env.PORT || 3000; app.set('port', port); // Load middlewares app.use(logger('dev')); // Start the server and listen on the preconfigured port app.listen(port, () => console.log(`App started on port ${port}.`))5 #Tổng kếtNhư vậy, mình đã hướng dẫn các bạn từng bước để có thể thu thập dữ liệu trang web trực tuyến. Có thể mỗi trang web khác nhau sẽ có cấu trúc HTML khác nhau nên có thể bạn sẽ cần cập nhật lại trình giải nén cho phù hợp. Nhưng về tổng thể thì cũng giống thế này thôi Các bạn có thể tải về toàn bộ mã nguồn của bài hướng dẫn tại đây Tải xuống mã nguồn Hi vọng qua bài viết này, các bạn sẽ hiểu rõ về kỹ thuật thu thập dữ liệu từ các trang web, cũng không kinh khủng lắm phải không Miễn phí khóa học React Native Bạn có muốn tải xuống toàn bộ video của khóa học rất nổi tiếng về React Native này không?
liên kết Bài trước 5 chiêu tăng tốc điện thoại Android chạy nhanh như mới Bài tiếp theo Machine Learning với Nodejs kết hợp TensorFlow. js sơn dương Tên đầy đủ là Dương Anh Sơn. Tốt nghiệp ĐH Bách Khoa Hà Nội. Mình bắt đầu nghiệp coder khi mà ra trường đúng là xin được làm đúng chuyên ngành. Mình tin rằng chỉ có chia sẻ kiến thức mới là cách học tập nhanh nhất. Các bạn góp ý bài viết của mình bằng cách comment bên dưới nhé |