Bạn có biết rằng, bạn có thể tạo một công cụ web scraping đơn giản chỉ bằng một vài thao tác trên Google Sheets hay không? Trong bài viết này, chúng ta sẽ khám phá cách thu thập, trích xuất dữ liệu web đơn giản bằng một số công thức đặc biệt từ Google Sheets.
Ví dụ bạn cần tìm danh sách các bài đăng từ một tác giả cụ thể. Mục đích là để xác định xem tác giả đó có thu hút được nhiều lượt xem trang hay không. Sẽ mất rất nhiều thời gian nếu bạn mở từng link một để thống kê, thay vào đó, hãy sử dụng công thức Google Sheets bên dưới.
Để minh họa ví dụ này, chúng ta sẽ lấy một vài bài viết từ tờ New York Times.
1. Sao chép url một bài báo ngẫu nhiên từ trang web mà bạn muốn trích xuất, dán vào bảng tính của bạn, trong ô A1.
2.Điều hướng đến trang web, trong ví dụ này là New York Times:
Bước này mục đích giúp chúng ta biết được trang New York Times gắn nhãn tác giả trên trang web như thế nào, từ đó có thể tạo một công thức để sử dụng trong tương lai.
3. Di chuột qua dòng chữ của tác giả và nhấp chuột phải để "Inspect Element" hiển thị menu và nhấp vào như được hiển thị trong ảnh chụp màn hình sau:
4. Trong cửa sổ bảng điều khiển dành cho nhà phát triển mới, có một dòng mã HTML mà chúng ta cần quan tâm và đó là dòng được đánh dấu:
JENNIFER MEDINA
Chúng ta sẽ sử dụng hàm IMPORTXML trong Google Trang tính, với đối số thứ hai (được gọi là “xpath-query”) truy cập vào phần tử HTML cụ thể ở trên.
Truy vấn xpath //span[@class='byline-author'], tìm kiếm các phần tử span có tên lớp là “byline-author”, rồi trả về giá trị của phần tử đó, là tên của tác giả mà chúng ta cần.
Sao chép công thức này vào ô B1, bên cạnh URL:
=IMPORTXML(A1,"//span[@class='byline-author']")
Sau đây là kết quả
Như vậy, bạn đã biết cách kiếm cơ bản trên web bằng cách sử dụng importXML trong Google sheets. Phần tiếp theo, chúng ta sẽ thử một ví dụ khó hơn một chút.
Tương tự như ví dụ bên trên, nhưng lần này chúng ta sẽ thử thách với những bài đăng có nhiều tác giả. Với một bài đăng có nhiều tác giả, công thức ở bước 4 như trên vẫn hoạt động, nhưng sẽ trả về cả hai tên trong các ô riêng biệt, tên này nằm dưới tên kia:
Nếu dữ liệu của bạn được cấu trúc theo hàng (tức là danh sách dài các URL trong cột A), bạn sẽ muốn điều chỉnh công thức để hiển thị cả tên tác giả trên cùng một hàng.
Về cách lựa chọn cấu trúc của dữ liệu trong Trang tính, bạn vui lòng xem thêm bài viết So sánh Bảng tính và Sơ sở dữ liệu: nên sử dụng định dạng bảng nào? của chúng tôi để xem định dạng bảng tính nào tối ưu hơn cho mục đích sử dụng dữ liệu của bạn.
Để hiển thị tất cả tên tác giả trong cùng một hàng, chúng ta sử dụng công thức Index như sau:
=INDEX(IMPORTXML(A1,"//span[@class='byline-author']"),1)
Trong công thức này, đối số thứ hai là 1, như vậy trong cột B chỉ hiển thị tác giả đầu tiên. Tiếp theo chúng ta sẽ tạo cột C cho tác giả thứ 2 và bạn có thể tạo thêm các cột mới cho nhiều tác giả hơn.
=INDEX(IMPORTXML(A1,"//span[@class='byline-author']"),2)
Lưu ý rằng các trang web có cấu trúc HTML khác nhau, do đó, công thức phải được sửa đổi một chút để tìm thông tin bằng cách tham chiếu thẻ HTML cụ thể, có liên quan. Vậy nên bạn cần thực hiện từ bước 1 chứ không đơn giản sử dụng cùng công thức ở bước 4 cho mọi trang web.
Trong ví dụ thứ 3 này, chúng ta sẽ sử dụng hàm IMPORTHTML để quét các bảng trên trang web Wikipedia. Bạn hãy sử dụng công thức sau đây:
=importhtml(A1,"table",2)
để cho ra kết quả như hình bên dưới
Việc tìm số thứ tự của bảng (trong ví dụ này là 2) liên quan đến một chút thử và sai, kiểm tra các giá trị bắt đầu từ 1, cho đến khi bạn nhận được kết quả mong muốn.
Lưu ý, công thức này cũng hoạt động đối với danh sách trên các trang web, trong trường hợp đó bạn thay đổi tham chiếu "table" trong công thức thành "list".
Dưới đây là một ví dụ nâng cao hơn của hàm IMPORTHTML. Chúng ta sẽ viết một công thức để trích xuất dữ liệu facebook của bạn vào trang tính.
Hãy bắt đầu nhập url trang Facebook trên điện thoại di động của bạn trong ô A1. Url sẽ có dạng:
https://www.mobile.facebook.com/Gitihovietnam
hoặc biến thể khác là
https://www.m.facebook.com/Gitihovietnam
Sau đó sử dụng công thức sau:
=INDEX(REGEXEXTRACT(REGEXEXTRACT(LOWER(INDEX(IMPORTXML(A1,"//@content"),2)),"([0-9km,.]+)(?: likes)"),"([0-9,.]+)([km]?)"),,1) * SWITCH(INDEX(REGEXEXTRACT(REGEXEXTRACT(LOWER(INDEX(IMPORTXML(A1,"//@content"),2)),"([0-9km,.]+)(?: likes)"),"([0-9,.]+)([km]?)"),,2),"k",1000,"m",1000000,1)
Công thức IMPORT của Google Sheets vô cùng mạnh mẽ và linh hoạt. Bạn có thể đọc thêm hướng dẫn nhập số liệu thống kê trên mạng xã hội vào Google Sheets, để biết cách sử dụng hàm IMPORTHTML trích suất dữ liệu từ 16 nền tảng mạng xã hội khác nhau. Từ đó, bạn sẽ có đủ số liệu để phân tích mạng xã hội hoặc quản lý mạng xã hội của mình.
Nếu bạn quản lý nhiều kênh khác nhau, bạn có thể sử dụng các kỹ thuật này để thiết lập chế độ xem chính (dashboard), hiển thị tất cả các chỉ số của bạn ở một nơi. Với hàm IMPORT, Google sheets sẽ trả về số lượng người theo dõi (hoặc số lượt thích trang) cho một kênh nhất định, nhưng bạn có thể điều chỉnh chúng để trả lại các chỉ số khác chỉ với một vài thao tác đơn giản.
Hy vọng với bài viết này, bạn đã biết thêm một vài thủ thuật hữu ích với hàm IMPORTHTML trong Google Sheets, giúp bạn dễ dàng trích suất dữ liệu bạn cần từ các trang web.
Gitiho đã cho ra mắt khóa học Google Sheets từ Cơ bản đến Nâng cao, công cụ thay thế Excel giúp bạn hoàn toàn có thể tự tin phân tích và xử lý dữ liệu trên Google Sheet, lập bảng biểu, báo cáo trực quan và hơn thế nữa. Bấm vào để học thử ngay!