02.07.2024 / 00:24
hoangchan
Bài đăng: 107
Member
Samsung j2

Bước 1: Chuẩn bị môi trường và tài liệu

- Tạo dự án Google Sheets:

Đăng nhập vào tài khoản Google của bạn.

Truy cập vào Google Sheets và tạo một bảng tính mới.

- Mở Google Apps Script:

Trong Google Sheets, chọn Extensions -> Apps Script để mở Google Apps Script Editor.

Bước 2: Lấy dữ liệu từ trang web

- Tạo hàm crawl để lấy dữ liệu:

Trong Google Apps Script Editor, tạo một hàm có tên crawl.

Hàm này sẽ nhận vào tham số date (ngày cần lấy dữ liệu) và isBack (không quan trọng trong bước này).

JAVASCRIPT
  1. function crawl(date, isBack) {
  2. var dateString = Utilities.formatDate(date, Session.getScriptTimeZone(), 'dd-MM-yyyy');
  3. var url = 'http://3ketqua.net/xo-so-truyen-thong.php?ngay=' + dateString;
  4.  
  5. try {
  6. var response = UrlFetchApp.fetch(url);
  7. var html = response.getContentText();
  8.  
  9. var $ = Cheerio.load(html); // Load và xử lý HTML bằng Cheerio
  10.  
  11. var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Data');
  12. var row = 2; // Dòng bắt đầu ghi dữ liệu trong bảng tính, A2
  13.  
  14. $('div[id^="rs_"]').each(function() {
  15. var id = $(this).attr('id');
  16. var data = $(this).text().trim();
  17. var position = id.split('_');
  18. var dayOfWeek = Utilities.formatDate(date, Session.getScriptTimeZone(), 'EEEE');
  19. var formattedDate = Utilities.formatDate(date, Session.getScriptTimeZone(), 'dd-MM-yyyy');
  20.  
  21. // Ghi dữ liệu vào từng ô của hàng hiện tại (row)
  22. sheet.getRange('A' + row).setValue(dayOfWeek);
  23. sheet.getRange('B' + row).setValue(formattedDate);
  24. sheet.getRange('C' + row).setValue(position[1]); // index
  25. sheet.getRange('D' + row).setValue(position[2]); // sub index
  26. sheet.getRange('E' + row).setValue(data);
  27.  
  28. row++; // Tăng chỉ số dòng để ghi vào dòng tiếp theo
  29. });
  30.  
  31. } catch (e) {
  32. Logger.log('Error fetching or parsing data: ' + e.toString());
  33. }
  34. }

[IMAGE]

Mã này sử dụng UrlFetchApp để tải nội dung từ URL và Cheerio để phân tích dữ liệu HTML.

Dữ liệu được ghi vào bảng tính từ cột A đến cột E, bắt đầu từ hàng 2.

- Tạo hàm daily để chạy hàng ngày:

Tạo một hàm daily để gọi hàm crawl với tham số là ngày hiện tại và false.

JAVASCRIPT
  1. function daily() {
  2. crawl(new Date(), false);
  3. }

Hàm này sẽ gọi hàm crawl mỗi ngày để cập nhật dữ liệu vào Google Sheets.

Bước 3: Triển khai và chạy dự án

- Triển khai dự án:

Lưu các thay đổi trong Google Apps Script Editor.

Chọn Publish -> Deploy as API executable.

Chọn phần quyền truy cập (có thể yêu cầu phê duyệt cho ứng dụng của bạn nếu bạn sử dụng dịch vụ Google lần đầu tiên).

- Chạy dự án:

Sau khi triển khai, chọn Run -> daily.

Xác nhận các quyền cần thiết nếu được yêu cầu.

Dự án sẽ chạy và cập nhật dữ liệu từ trang web vào Google Sheets.

Bước 4: Kiểm tra kết quả

Sau khi chạy, kiểm tra bảng tính Data trong Google Sheets để xem dữ liệu đã được cập nhật đúng chưa.

Nếu có lỗi, sử dụng View -> Logs trong Google Apps Script Editor để xem thông tin chi tiết lỗi.

Kết quả

[IMAGE]

Tuy rằng nó đã chạy thành công, nhưng mình cần nó hiển thị theo dòng kiểu dưới này. xin mọi người có cách giải quyết vấn đề này với ạ:

a2: --

b2: result_date

c2: rs_0_0

d2: rs_1_0

e2: rs_2_0

f2: rs_2_1

g2: rs_3_0

h2: rs_3_1

i2: rs_3_2

j2: rs_3_3

k2: rs_3_4

l2: rs_3_5

m2: rs_4_0

n2: rs_4_1

o2: rs_4_2

p2: rs_4_3

q2: rs_5_0

r2: rs_5_1

s2: rs_5_2

t2: rs_5_3

u2: rs_5_4

v2: rs_5_5

w2: rs_6_0

x2: rs_6_1

y2: rs_6_2

z2: rs_7_0

aa2: rs_7_1

ab2: rs_7_2

ac2: rs_7_3

Nguồn: ChatGPT

Người dùng đã xem (6)