Đó là forbidding you truy cập trang vì bạn có NULL
trong chuỗi tiêu đề của tiêu đề. (. Thông thường đó là một chuỗi nói gì trình duyệt bạn đang sử dụng, mặc dù một số trình duyệt cho phép người dùng giả mạo trình duyệt khác) Sử dụng gói httr
, bạn có thể thiết lập một chuỗi user-agent
:
library(httr)
library(rvest)
url <- "https://www.opm.gov/policy-data-oversight/data-analysis-documentation/federal-employment-reports/historical-tables/total-government-employment-since-1962/"
x <- GET(url, add_headers('user-agent' = 'Gov employment data scraper ([[your email]])'))
bọc trong một yêu cầu GET
, add_headers
phép bạn đặt bất kỳ thông số nào bạn thích. Bạn cũng có thể sử dụng chức năng user_agent
cụ thể hơn thay cho add_headers
, nếu đó là tất cả những gì bạn muốn đặt.
Trong trường hợp này, bất kỳ chuỗi user-agent
nào cũng sẽ hoạt động nhưng lịch sự (xem liên kết ở cuối) để cho biết bạn là ai và bạn muốn gì.
Bây giờ bạn có thể sử dụng rvest
để phân tích cú pháp HTML và kéo bảng ra. Bạn sẽ cần một cách để chọn bảng có liên quan; nhìn vào HTML, tôi thấy nó có class = "DataTable"
, nhưng bạn cũng có thể sử dụng SelectorGadget (xem rvest
họa tiết) để tìm một bộ chọn CSS hoặc XPath hợp lệ. Do đó
x %>%
read_html() %>%
html_node('.DataTable') %>%
html_table()
cung cấp cho bạn dữ liệu đẹp (nếu không hoàn toàn sạch).
Lưu ý: Cạo có trách nhiệm và hợp pháp. Do OPM là một nguồn của chính phủ, nó thuộc phạm vi công cộng, nhưng đó không phải là trường hợp với rất nhiều trang web. Luôn đọc mọi điều khoản dịch vụ, cộng với this nice post on how to scrape responsibly.
Xem [https://en.wikipedia.org/wiki/HTTP_403](https://en.wikipedia.org/wiki/HTTP_403). Nó không nhất thiết phải là kết thúc của con đường, nhưng chắc chắn là một rào cản. – alistaire