Cách lấy dữ liệu từ Google News bằng API và Node.js?

Senior Web Scraping Engineer
news.google.com có lẽ là nơi tốt nhất để tìm các bài báo tin tức! Google News là một bộ sưu tập tin tức đã được xác minh, cập nhật theo thời gian thực và là một trong những nền tảng được tin cậy và yêu thích nhất đối với người dùng Internet.
Vì lý do tương tự, việc thu thập dữ liệu từ Google News có thể được sử dụng để thu thập các bài báo tin tức mới nhất, các chủ đề đang xu hướng và siêu dữ liệu liên quan để phân tích dữ liệu, nghiên cứu hoặc chỉ đơn giản là đọc tin tức. Nếu bạn muốn đi xa hơn một bước, việc thu thập dữ liệu từ Google News cũng có thể giúp bạn xây dựng ứng dụng tin tức cá nhân của riêng mình thông qua việc thu thập dữ liệu web thời gian thực.
Trong bài đăng trên blog này, chúng ta sẽ khám phá cách thu thập dữ liệu có liên quan từ Google News bằng Node.JS và Google News API.
Tại sao chúng ta nên thu thập dữ liệu từ kết quả tìm kiếm của Google News?
Bất kể ngành nào, việc thu thập dữ liệu từ Google News đều có thể tạo điều kiện thuận lợi cho sự phát triển của một tổ chức:
Hãy lấy ví dụ về một công ty trong ngành du lịch hoặc khách sạn. Việc thu thập thông tin về các chiến lược du lịch, các biện pháp an toàn và xu hướng du lịch có thể giúp các công ty dự đoán những thay đổi về tỷ lệ lấp đầy và lên kế hoạch hành động cho phù hợp. Họ cũng có thể sử dụng thông tin này để điều chỉnh các chiến lược tiếp thị sao cho hiệu quả hơn và thu hút khách hàng mới.
Mặt khác, các công ty đầu tư có thể sử dụng tin tức tài chính để thu thập dữ liệu về sự phát triển của thị trường, những thay đổi về quy định và dự báo kinh tế. Việc sử dụng chính xác dữ liệu này có thể giúp họ quản lý rủi ro hiệu quả hơn và đưa ra lời khuyên chính xác hơn cho khách hàng của họ. Điều này có thể cải thiện hiệu suất danh mục đầu tư và sự hài lòng của khách hàng.
Google News Scraper thu thập dữ liệu gì?

📰 Siêu dữ liệu bài viết
- Tiêu đề: Tiêu đề của bài báo tin tức.
- Nguồn: Nhà xuất bản hoặc cơ quan tin tức (ví dụ: BBC, CNN).
- Ngày xuất bản: Bài báo được xuất bản khi nào.
- Tác giả: Tên của nhà báo hoặc người đóng góp.
- Tóm tắt/Đoạn trích: Mô tả ngắn gọn hoặc đoạn trích từ bài báo.
- URL: Liên kết đến toàn bộ bài báo.
✍️ Dữ liệu nội dung
- Toàn văn: Phần chính của bài báo tin tức (yêu cầu truy cập vào trang web nguồn).
- Hình ảnh/Phương tiện: Hình ảnh, video hoặc các phương tiện khác được nhúng trong bài báo.
- Từ khóa/Chủ đề: Thẻ hoặc danh mục được liên kết với bài báo (ví dụ: "Chính trị", "Công nghệ").
📊 Dữ liệu xu hướng và độ phổ biến
- Các chủ đề đang xu hướng: Các chủ đề hoặc câu chuyện phổ biến hiện tại trên Google News.
- Các câu chuyện hàng đầu: Các bài báo được đánh dấu là tin tức hàng đầu cho một danh mục hoặc khu vực cụ thể.
- Xu hướng tìm kiếm: Các thuật ngữ tìm kiếm phổ biến liên quan đến các chủ đề tin tức.
🧭 Dữ liệu địa lý và nhân khẩu học
- Tin tức dựa trên vị trí: Các bài báo tin tức được điều chỉnh cho các khu vực hoặc quốc gia cụ thể.
- Ngôn ngữ: Ngôn ngữ mà bài báo được viết.
🧐 Phân tích và thông tin chi tiết
- Phân tích tâm lý: Tông giọng hoặc tâm lý của bài báo (tích cực, tiêu cực, trung lập).
- Phân cụm chủ đề: Nhóm các bài báo theo các chủ đề hoặc nội dung tương tự.
- Phân tích thời gian: Theo dõi cách các câu chuyện tin tức phát triển theo thời gian.
Xây dựng Google News Scraper của bạn bằng Node.js | từng bước
Chuẩn bị môi trường
Chúng ta cần nhập các thư viện sau vào dự án Node.
JavaScript
const axios = require('axios');
const fs = require('fs');
Bây giờ, hãy tạo một hàm để lấy một số kết quả từ Google News:
JavaScript
async function getNewsData() {
const headers = {
"User-Agent":
"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/101.0.4951.54 Safari/537.36",
};
try {
const response = await axios.get(
"https://news.google.com/home?hl=en-US&gl=US",
{ headers }
);
const html = response.data;
} catch (error) {
console.error("Error:", error.message);
}
}
Bây giờ, chúng ta đặt User-Agent của Header, cho phép chúng ta truy cập Google một cách tự nhiên. Sau đó, chúng ta sử dụng thư viện request để gửi yêu cầu.
Bây giờ, chúng ta cần tìm dữ liệu cần thiết từ dữ liệu trả về.

Nếu bạn tìm kiếm trong truy vấn, bạn có thể thấy rằng mỗi kết quả hoặc tin tức đều tồn tại trên trang. Do đó, chúng ta cần sử dụng biểu thức chính quy để khớp với dữ liệu cần thiết và sau đó xử lý nó.
JavaScript
const regex = /data:(\[.*?\]), sideChannel/s;
const match = html.match(regex);
Thu thập dữ liệu Google News
Thông tin cụ thể trong nhóm dữ liệu được trích xuất được lưu trữ dưới dạng một mảng. Tại thời điểm này, bạn cần so sánh thông tin cụ thể trên trang và lọc ra chỉ số tương ứng với dữ liệu cụ thể.
JavaScript
let resp = [];
const data = JSON.parse(match[1]);
for (const section of data[1][3][1]) {
if (Array.isArray(section[0])) {
for (const item of section[0]) {
const utcTime = new Date(item[4][0] * 1000).toISOString();
console.log(utcTime)
resp.push({
title: item[2],
source: {
name: item[10][2],
icon: item[10][22]?.[0] || null,
authors: item[item.length - 1]?.[0] || []
},
link: item[38],
thumbnail: item[8]?.[0]?.[13] || null,
thumbnail_small: item[8]?.[0]?.[0] || null,
date: utcTime
});
break;
}
}
}
Cuối cùng, chúng ta đã trích xuất tất cả dữ liệu cần thiết.
Mã hoàn chỉnh
JavaScript
const axios = require('axios');
const fs = require('fs');
async function getNewsData() {
const headers = {
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/101.0.4951.54 Safari/537.36"
};
try {
const response = await axios.get("https://news.google.com/home?hl=en-US&gl=US", { headers });
const html = response.data;
const regex = /data:(\[.*?\]), sideChannel/s;
const match = html.match(regex);
if (!match || !match[0]) {
throw new Error('No valid JSON data found');
}
let resp = [];
const data = JSON.parse(match[1]);
for (const section of data[1][3][1]) {
if (Array.isArray(section[0])) {
for (const item of section[0]) {
const utcTime = new Date(item[4][0] * 1000).toISOString();
resp.push({
title: item[2],
source: {
name: item[10][2],
icon: item[10][22]?.[0] || null, // Safe access to nested properties
authors: item[item.length - 1]?.[0] || []
},
link: item[38],
thumbnail: item[8]?.[0]?.[13] || null,
thumbnail_small: item[8]?.[0]?.[0] || null,
date: utcTime
});
break;
}
}
}
return resp;
} catch (error) {
console.error('Error:', error.message);
}
}
// Execute function
getNewsData().then(data => {
console.log(data);
});
Kết quả thu thập dữ liệu
Bây giờ, hãy xem kết quả của mã chạy trong thiết bị đầu cuối:

Tuy nhiên, để lưu dữ liệu ở nơi an toàn hơn, chúng ta cần tối ưu hóa một số điều:
JavaScript
const fs = require('fs');
fs.writeFileSync('data.json', JSON.stringify(resp, null, 2), 'utf8');
Nội dung tệp cuối cùng như sau:

Thu thập dữ liệu Google News dễ dàng với Scrapeless Deep SerpApi

Google News API của chúng tôi cho phép bạn thu thập dữ liệu từ các trang tìm kiếm của Google News. API có thể truy cập thông qua điểm cuối sau: "engine": "google_news"
. Bạn có thể sử dụng APIDog để hoàn thành việc thu thập dữ liệu tại https://apidocs.scrapeless.com/api-14581677. Ngoài ra, một cách nhanh hơn là xem bản demo tương tác trực tiếp bằng cách sử dụng Scrapeless Deep SerpApi Playground.
Tại sao chúng ta nên sử dụng API?
- Không cần tạo trình phân tích cú pháp từ đầu và duy trì nó.
- Vượt qua việc chặn của Google: có thể tự động giải quyết chống bot hoặc giải quyết việc chặn IP.
- Không cần trả thêm tiền cho proxy và công cụ mở khóa web.
- Không cần sử dụng tự động hóa trình duyệt.
Scrapeless Google News API có thể dễ dàng xử lý tất cả các vấn đề trên, với thời gian phản hồi ngắn là ~2.33
giây mỗi yêu cầu (~1.47
giây rất nhanh). Người dùng chỉ cần một cuộc gọi API để có được dữ liệu thu thập chính xác, mà chúng tôi hiển thị bằng JSON có cấu trúc tốt.
Tham gia cộng đồng của chúng tôi và nhận 500K lượt sử dụng miễn phí!
Các bước sử dụng
- Bước 1. Đăng nhập vào Scrapeless Playground.
- Bước 2. Tìm actor Google News và nhấp vào.
- Bước 3. Cấu hình các tham số truy vấn.
- Bước 4. Nhấp vào Bắt đầu tìm kiếm và nhận kết quả.

Đọc thêm
- Cách thu thập dữ liệu từ kết quả tìm kiếm của Google?
- Cách thu thập dữ liệu từ Google Trends?
- Cách thu thập dữ liệu công khai của Google Maps?
- Cách thu thập dữ liệu từ Google Jobs?
- Cách thu thập dữ liệu từ Google Scholar?
- Cách thu thập dữ liệu từ Google Shopping?
- Cách thu thập dữ liệu từ Google Flights?
Kết luận
Bài viết này thảo luận về hai phương pháp để thu thập dữ liệu Google News bằng Node.js. Những người thu thập dữ liệu muốn có các công cụ thu thập dữ liệu độc lập và muốn duy trì một số tính linh hoạt khi thu thập dữ liệu có thể sử dụng Node.js như một giải pháp thay thế để tương tác với các trang web. Hãy làm theo các bước của chúng tôi để dễ dàng xây dựng trình thu thập dữ liệu của bạn.
Ngoài ra, Google News API là một giải pháp đơn giản có thể nhanh chóng trích xuất và làm sạch dữ liệu thô thu được từ trang web và trình bày nó ở định dạng JSON có cấu trúc. Chỉ cần cấu hình tham số đơn giản là có thể nhanh chóng hoàn thành việc thu thập dữ liệu.
Thử nghiệm miễn phí ngay bây giờ!
Câu hỏi thường gặp
Có hợp pháp khi thu thập dữ liệu Google News không?
Có, việc thu thập dữ liệu Google News là hợp pháp vì đó là thông tin công khai. Tuy nhiên, bạn nên lưu ý các luật địa phương và khu vực liên quan đến bản quyền và dữ liệu cá nhân.
Google có xóa nội dung bất hợp pháp không?
Có. Thông thường, Google sẽ xóa hoặc hạn chế quyền truy cập vào nội dung chỉ ở quốc gia/khu vực mà nội dung đó bị coi là bất hợp pháp.
Google có chặn trình thu thập dữ liệu web không?
Điều khoản và điều kiện của Google rõ ràng cấm việc thu thập dữ liệu từ các dịch vụ của họ, bao gồm cả kết quả tìm kiếm. Vi phạm các điều khoản này có thể dẫn đến việc các dịch vụ của Google chặn địa chỉ IP của bạn. Kết quả là, bạn có thể phải trang bị một giải pháp mở khóa web mạnh mẽ.
Tại Scrapless, chúng tôi chỉ truy cập dữ liệu có sẵn công khai trong khi tuân thủ nghiêm ngặt các luật, quy định và chính sách bảo mật trang web hiện hành. Nội dung trong blog này chỉ nhằm mục đích trình diễn và không liên quan đến bất kỳ hoạt động bất hợp pháp hoặc vi phạm nào. Chúng tôi không đảm bảo và từ chối mọi trách nhiệm đối với việc sử dụng thông tin từ blog này hoặc các liên kết của bên thứ ba. Trước khi tham gia vào bất kỳ hoạt động cạo nào, hãy tham khảo ý kiến cố vấn pháp lý của bạn và xem xét các điều khoản dịch vụ của trang web mục tiêu hoặc có được các quyền cần thiết.