Crawl dữ liệu là quá trình thu thập thông tin từ các trang web khác nhau thông qua việc tự động truy cập và thu thập dữ liệu từ các trang đó. Phương pháp này rất hữu ích khi bạn muốn lấy dữ liệu từ các trang web có sẵn để sử dụng cho mục đích phân tích, tìm kiếm hoặc hiển thị trên trang web của bạn.
Trong bài viết này, chúng ta sẽ tìm hiểu cách crawl dữ liệu bằng cách sử dụng Node.js và Express – hai công nghệ phổ biến trong việc phát triển ứng dụng web.
Chuẩn bị môi trường
Trước khi bắt đầu, chúng ta cần đảm bảo rằng môi trường phát triển của chúng ta đã được cài đặt đúng cách. Đầu tiên, cài đặt Node.js trên máy tính của bạn bằng cách truy cập trang web chính thức của Node.js và tải xuống phiên bản phù hợp với hệ điều hành của bạn. Sau khi cài đặt xong, hãy kiểm tra phiên bản đang sử dụng bằng cách mở terminal và nhập lệnh:
node -v
Nếu phiên bản Node.js hiện ra màn hình, điều này có nghĩa là bạn đã cài đặt thành công.
Tiếp theo, chúng ta cần tạo một thư mục mới để làm việc. Mở terminal và nhập lệnh sau để tạo thư mục mới và di chuyển vào:
mkdir crawl-du-lieu
cd crawl-du-lieu
Sau khi đã có thư mục làm việc, chúng ta có thể bắt đầu cài đặt Express Framework.
Crawl dữ liệu sử dụng Express và Node.js
Bây giờ, chúng ta đã sẵn sàng để bắt đầu crawl với Node.js và Express. Tạo một tệp mới trong thư mục dự án của bạn và đặt tên là crawl.js.
const express = require('express');
const axios = require('axios');
const cheerio = require('cheerio');
const app = express();
const port = 3000;
app.get('/', async (req, res) => {
try {
const response = await axios.get('https://topdev.vn/viec-lam-it?src=topdev.vn&medium=mainmenu');
const html = response.data;
const $ = cheerio.load(html);
let results = [];
// Phân tích dữ liệu từ html
$('li.mb-4').each((index, element) => {
let object = {}
// Lấy id class từ thẻ tương ứng.
const title = $(element).find('.flex-1 .line-clamp-1').text();
const company = $(element).find('.flex-1 .mt-1.line-clamp-1').text();
const level = $(element).find('.flex-1 .mt-2 .text-gray-500').text();
const location = $(element).find('.flex-1 .flex.items-end').text();
object.title = title;
object.company = company;
object.level = level;
object.location = location;
})
res.json(results);
} catch (error) {
console.error(error);
res.status(500).json({ error: 'Lỗi khi tải dữ liệu' });
}
});
app.listen(port, () => {
console.log(`Server đang lắng nghe tại http://localhost:${port}`);
});
Trong tệp crawl.js trên, chúng ta định nghĩa một server Express đơn giản lắng nghe tại cổng 3000. Khi truy cập vào đường dẫn gốc, chúng ta sử dụng thư viện axios để tải nội dung của trang web mục tiêu. Sau đó, chúng ta sử dụng cheerio để phân tích các phần tử HTML cần thiết và trả về dữ liệu phục vụ cho yêu cầu.
Chạy ứng dụng crawl dữ liệu
Để chạy ứng dụng crawl dữ liệu, hãy mở terminal và nhập lệnh sau:
node crawl.js
Nếu bạn không nhận được bất kỳ lỗi nào, bạn sẽ nhìn thấy dòng
Server đang lắng nghe tại http://localhost:3000
Hoạt động thành công! Bây giờ, bạn có thể truy cập http://localhost:3000 để xem dữ liệu đã crawl được từ trang web mục tiêu.
Kết quả
Server đang lắng nghe tại http://localhost:3000
[
{
title: 'JUNIOR CLOUD SOLUTION ARCHITECTCloud Kinetics',
company: 'Cloud Kinetics',
level: 'Junior',
location: 'Thành phố Hồ Chí Minh (+1)(In Office)'
},
{
title: 'Middle/Senior/Team Leader Android_TS110102-AndroidTalent Success',
company: 'Talent Success',
level: 'Trưởng Nhóm, Middle, Senior',
location: ' Hà Nội(In Office)'
},
{
title: '03 Software Developers (Java/PHP/VB/C#)Total Software Bank VietNam (TSB VN)',
company: 'Total Software Bank VietNam (TSB VN)',
level: 'Fresher',
location: 'Quận 1, Hồ Chí Minh'
},
{
title: 'Senior QC Engineer/ Tester ( Good English)S3 Corporation (S3Corp)',
company: 'S3 Corporation (S3Corp)',
level: 'Trưởng Nhóm, Senior',
location: 'Quận Tân Bình, Hồ Chí Minh(In Office)'
},
{
title: 'iOS Developers (Team member)CÔNG TY TNHH STARFRUIT VINAFull salary and social security coverage after probationAnnual salary negotiation and rewards for outstanding employees after probationSalary payment on the 10th of each month',
company: 'CÔNG TY TNHH STARFRUIT VINA',
level: 'Middle',
location: 'Thành phố Thủ Đức, Hồ Chí Minh(In Office)'
},
{ title: '', company: '', level: '', location: '' },
{
title: 'RUBY ON RAILS DEVELOPERZIGEXN VENTURAMacBook/Laptop/PC is provided to meet your work requirements.Salary: Up to 2,000$100% salary on 2 months of probation',
company: 'ZIGEXN VENTURA',
level: 'Senior',
location: 'Quận Hải Châu, Đà Nẵng(In Office)'
},
{
title: 'Bridge Software Engineer (BrSE, PM, Sign-on Bonus)NEC VietnamWorking time: Mon-Fri, Hybrid working mode (WFH available)13th Salary + Year-End Reward (a half month) + Excellent Bonus (up to 5 months)Special allowance for foreign language certificate (up to 500USD/month)',
company: 'NEC Vietnam',
level: 'Trưởng phòng, Trưởng Nhóm, Senior',
location: 'Quận Tân Bình, Hồ Chí Minh(Hybrid)'
},
{
title: '[Hybrid working] Senior Java DeveloperCÔNG TY TNHH PERSOL PROCESS & TECHNOLOGY VIỆT NAM',
company: 'CÔNG TY TNHH PERSOL PROCESS & TECHNOLOGY VIỆT NAM',
level: 'Senior',
location: 'Quận 3, Hồ Chí Minh(Hybrid)'
},
{
title: 'Backend Developer (NodeJS)Icetea Software',
company: 'Icetea Software',
level: 'Middle',
location: 'Quận Cầu Giấy, Hà Nội(In Office)'
},
{
title: 'DevOps Engineer2NF Software',
company: '2NF Software',
level: 'Middle',
location: 'Quận Cầu Giấy, Hà Nội(In Office)'
}
]
Kết luận
Trong bài viết này, chúng ta đã tìm hiểu cách crawl dữ liệu bằng cách sử dụng Node.js và Express. Chúng ta đã cài đặt môi trường phát triển, tạo một ứng dụng crawl đơn giản và chạy ứng dụng để thu thập dữ liệu từ một trang web. Bằng cách sử dụng các công nghệ này, bạn có thể tự động lấy thông tin từ các trang web khác nhau một cách linh hoạt và hiệu quả.
Xem thêm: 19 tiện ích mở rộng cần phải có khi sử dụng VS Code