Hướng dẫn r scrape html table - r cạo bảng html

Cạo dữ liệu bảng Tab Nó là một trong những nhà khoa học dữ liệu kỹ năng mạnh mẽ nhất có thể phải thu thập thông tin liên quan theo quy mô.

Bây giờ, hầu hết mọi bộ dữ liệu được hiển thị trên Internet đều sử dụng các bảng HTML để sắp xếp và hiển thị bộ dữ liệu phức tạp ở định dạng dễ hiểu hơn.

Trong bài viết hôm nay, chúng tôi sẽ sử dụng gói RVest để trích xuất dữ liệu từ các bảng HTML và gửi nó vào một khung dữ liệu để phân tích thêm và nhập nó vào tệp CSV.

Lưu ý: Nếu đây là lần đầu tiên bạn sử dụng R, hãy làm theo hướng dẫn cài đặt và thiết lập từ việc cạo web của chúng tôi trong hướng dẫn của người mới bắt đầu. Bạn cũng sẽ học cách thực hiện cào cơ bản với gói rvest mà chúng tôi sẽ sử dụng trong hướng dẫn này. If this is your first time using R, follow the installation and setup instructions from our web scraping in R beginner tutorial. You’ll also learn how to do basic scraping with the Rvest package we’ll be using in this tutorial.

Hướng dẫn r scrape html table - r cạo bảng html

1. Thiết lập môi trường phát triển của bạn

Điều đầu tiên chúng ta cần làm là tạo ra một thư mục mới cho dự án của chúng tôi. Mở Rstudio và nhấp vào trên Tạo Tạo một dự án.

Bên trong thư mục mới, nhấp vào Tệp mới và tạo tập lệnh R mới. Hãy gọi cho nó gọi nó là rvest_html_table (nó sẽ tự động lưu nó dưới dạng tệp .r).

Hướng dẫn r scrape html table - r cạo bảng html

Trên tệp mới của chúng tôi, chúng tôi sẽ cài đặt các gói RVest và DPPLY bằng các lệnh sau:

install.packages("rvest")
install.packages("dplyr")

Có thể mất một vài phút để cài đặt, nhưng với bước cuối cùng này, chúng tôi đã sẵn sàng để tạo ra cái cào của chúng tôi.

Vì vậy, trước tiên, hãy để Lừa xem trang web mục tiêu của chúng tôi:

2. Gửi yêu cầu ban đầu thông qua Scraperapi

Đối với hướng dẫn này, chúng tôi sẽ cạo https://datatables.net/examples/basic_init/multiple_tables.html. Đây là một trang web tuyệt vời để kiểm tra kiến ​​thức cạo của bạn và để hiểu mọi thứ.

Hướng dẫn r scrape html table - r cạo bảng html

Như chúng ta có thể thấy, có hai bảng trên trang này. Chúng ta có thể cạo cả hai nếu chúng ta muốn nhưng vì lợi ích của hướng dẫn này, hãy để Lôi thử và chỉ chọn cái đầu tiên.

Để bắt đầu, tất cả những gì chúng ta cần làm là gửi yêu cầu HTTP đến máy chủ và tải xuống tệp HTML, vì dữ liệu ngày càng có giá trị hơn, rất nhiều trang web đang thắt chặt kịch bản vô dụng.

Để các trình phế liệu web của chúng tôi đủ khả năng phục hồi để hoàn thành công việc, chúng tôi cần đảm bảo rằng chúng tôi sẽ làm càng nhiều càng tốt để bắt chước hành vi hữu cơ của con người khi cạo dữ liệu bảng.

Scraperapi là một giải pháp mạnh mẽ tự động xử lý các phức tạp này bằng cách chỉ thêm một chuỗi vào URL mục tiêu của chúng tôi. Nó sử dụng học máy, nhiều năm dữ liệu thống kê, proxy của bên thứ 3 và các trang trại trình duyệt khổng lồ để đảm bảo bạn không bao giờ bị chặn bởi các kỹ thuật chống xẹp.

Để sử dụng Scraperapi, tất cả những gì chúng ta cần làm là tạo một tài khoản Scraperapi mới để tạo khóa API của chúng tôi và đổi 5000 cuộc gọi API miễn phí.

Hướng dẫn r scrape html table - r cạo bảng html

Hãy để quay trở lại Rstudio và:

  1. Nhập RVest và DPPLE vào dự án của chúng tôi, thêm library("rvest")library("dplyr") ở đầu tệp (bây giờ bạn có thể xóa các lệnh cài đặt trước đó nếu bạn thích)
  2. Tiếp theo, chúng tôi sẽ tạo một biến mới có tên là phản hồi và tải xuống bảng HTML bằng phương thức read_html().

Bởi vì chúng tôi sẽ sử dụng Scraperapi để gửi yêu cầu, chúng tôi cần xây dựng URL của mình theo định dạng sau:

http://api.scraperapi.com?api_key={YOUR_API-KEY}&url={TARGET_URL}

Đặt mọi thứ lại với nhau, ở đây, cách nó trông như thế nào trên mã của chúng tôi:

response = read_html("http://api.scraperapi.com?api_key=51e43be283e4db2a5afb62660xxxxxxx&url=https://datatables.net/examples/basic_init/multiple_tables.html")

Lưu ý: Nếu bạn gặp phải một lỗi như chức năng READ_HTML không tìm thấy, hãy cài đặt và nhập gói XML2 bằng hai lệnh này: install.packages ( If you encountered an error like “read_html function not found”, install and import the XML2 package using these two commands: install.packages(“xml2”) and library(“xml2”).

Nếu mọi thứ suôn sẻ, hãy nhập chế độ xem (phản hồi) vào bảng điều khiển của bạn và nó sẽ hiển thị cho bạn dữ liệu được lấy từ URL.

Hướng dẫn r scrape html table - r cạo bảng html

3. Gửi dữ liệu bảng HTML đến DataFrame

Đối với dữ liệu bảng, RVEST có chức năng thanh lịch có phản hồi HTML và phát hiện các bảng HTML trong tài liệu. Để sử dụng nó, hãy để tạo ra một biến mới gọi là bảng và sử dụng hàm html_table () trên biến phản hồi của chúng tôi bằng toán tử ống (%>%):

tables = response %>% html_table()

Điều này sẽ tự động tạo DataFrame bằng cách sử dụng dữ liệu từ bảng.

Hướng dẫn r scrape html table - r cạo bảng html

Một vài cân nhắc:

  • Khi bảng bị thiếu dữ liệu từ các ô, bạn cần thêm tham số
    http://api.scraperapi.com?api_key={YOUR_API-KEY}&url={TARGET_URL}
    0 vào hàm
    http://api.scraperapi.com?api_key={YOUR_API-KEY}&url={TARGET_URL}
    1, nhưng nó không cần thiết nữa.
  • Trong trường hợp của bảng này, hàng tiêu đề được xây dựng bằng thẻ
    http://api.scraperapi.com?api_key={YOUR_API-KEY}&url={TARGET_URL}
    2, do đó, không cần sử dụng tham số tiêu đề bên trong hàm
    http://api.scraperapi.com?api_key={YOUR_API-KEY}&url={TARGET_URL}
    1.

4. Chọn đúng bảng

Khi được áp dụng cho các tài liệu, hàm

http://api.scraperapi.com?api_key={YOUR_API-KEY}&url={TARGET_URL}
1 trả về một danh sách các trò chơi (một gói trong ngôn ngữ lập trình R được sử dụng để thao tác và in dữ liệu dữ liệu). Nếu bạn chú ý, mỗi tibbble trong DataFrame có một số được gán cho nó và chúng tôi có thể sử dụng nó để chọn cái chúng tôi cần.

Hướng dẫn r scrape html table - r cạo bảng html

table_one = tables[[1]]

Và nó chỉ trả lại dữ liệu bảng đầu tiên và đưa nó vào một khung dữ liệu. Trong hình ảnh dưới đây, bạn có thể thấy rằng chỉ Table_one mới có biểu tượng DataFrame ở bên phải.

Hướng dẫn r scrape html table - r cạo bảng html

Nhấp vào Table_one hoặc nhập

http://api.scraperapi.com?api_key={YOUR_API-KEY}&url={TARGET_URL}
5 trên bảng điều khiển của bạn để mở nó - hãy nhớ rằng lệnh xem có độ nhạy cảm trường, vì vậy hãy đảm bảo V được viết hoa.

Hướng dẫn r scrape html table - r cạo bảng html

5. Gửi DataFrame đến tệp CSV

Bởi vì DataFrame của chúng tôi đã được tạo, việc nhập dữ liệu này vào tệp CSV khá dễ dàng. Đầu tiên, hãy để cài đặt gói WriteXL với

http://api.scraperapi.com?api_key={YOUR_API-KEY}&url={TARGET_URL}
6 và sau đó nhập nó vào dự án của chúng tôi.

Để tạo tệp của chúng tôi, chúng tôi sẽ sử dụng chức năng

http://api.scraperapi.com?api_key={YOUR_API-KEY}&url={TARGET_URL}
8 và chuyển cho nó DataFrame của chúng tôi (Table_One) và đường dẫn cho tệp của chúng tôi giữa các dấu ngoặc kép.

write_xlsx(table_one,"./html_table.csv")

./ Nói với tập lệnh của chúng tôi để tạo tệp trong thư mục hiện tại (từ dự án của chúng tôi) và sau đó tên cho tệp.

Lưu ý: Bạn có thể sử dụng các tiện ích mở rộng khác nhau cho tệp như .xlsx. You can use different extensions for the file like .xlsx.

Hướng dẫn r scrape html table - r cạo bảng html

Và đó là nó. Xin chúc mừng, bạn vừa cạo toàn bộ bảng HTML trong một vài dòng.

Đây là cách mà kịch bản của chúng tôi kết thúc:

install.packages("rvest")
install.packages("dplyr")

library("rvest")
library("dplyr")
response = read_html("http://api.scraperapi.com?api_key=51e43be283e4db2a5afb62660xxxxxxx&url=https://datatables.net/examples/basic_init/multiple_tables.html")

tables = response %>% html_table()
table_one = tables[[1]]

install.packages("writexl")
library("writexl")
write_xlsx(table_one,"./html_table.csv")

Cạo các bảng HTML với rvest cực kỳ dễ dàng nhờ hàm html_table (). Nếu bạn có thể quét một số bảng từ một trang web, được chỉ định mỗi bảng cho biến của chúng tôi để bạn có thể có một khung dữ liệu cho mỗi bảng và xuất chúng như bạn muốn.

Nếu bạn muốn cạo các bảng HTML từ các trang được phân trang, hãy xem hướng dẫn quét web rvest trước của chúng tôi, nơi chúng tôi đi sâu vào chi tiết hơn về việc cạo nhiều trang và kết hợp chúng thành một khung dữ liệu duy nhất.

Cho đến lần sau, hạnh phúc cào!