2016-02-29 16 views
5

Tôi đang sử dụng R để chặn bàn trang web từ this site.Web đang truy cập trang web dựa trên IIS

Tôi đang sử dụng thư viện rvest.

#install.packages("rvest", dependencies = TRUE) 
library(rvest) 
OPMpage <- read_html("https://www.opm.gov/policy-data-oversight/data-analysis-documentation/federal-employment-reports/historical-tables/total-government-employment-since-1962/") 

tôi nhận được lỗi này:

Error in open.connection(x, "rb") : HTTP error 403.

Tôi đang làm gì sai?

+0

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

Trả lời

0

định dạng của bạn cho read_html hoặc html là đúng:

library(rvest) 
lego_movie <- read_html("http://www.imdb.com/title/tt1490017/") 
lego_movie <-  html("http://www.imdb.com/title/tt1490017/") 

Nhưng bạn đang nhận được 403 vì một trong hai trang hoặc một phần của trang web mà bạn đang cố gắng để cạo không cho phép cạo.

Bạn có thể cần để xem vignette("selectorgadget") và sử dụng selectorgadget kết hợp với rvest:

http://blog.rstudio.org/2014/11/24/rvest-easy-web-scraping-with-r/

Nhưng, nhiều khả năng, nó chỉ là không phải là một trang đó có nghĩa là phải cạo. Tuy nhiên, tôi tin rằng Barack Obama và Nhà khoa học dữ liệu trưởng mới của Hoa Kỳ, DJ Patil, gần đây đã triển khai một số central hub để có được loại dữ liệu của chính phủ Hoa Kỳ đó để nhập dễ dàng.

+0

'? Html':" 'html' không được dùng nữa: vui lòng sử dụng' read_html() 'thay thế." – alistaire

+0

_please_ không sử dụng IMDB làm ví dụ ref cho việc cạo.Bạn đang yêu cầu 100% mọi người trở thành phi đạo đức và buộc họ phải hành động pháp lý tiềm năng. Tôi quan tâm không phải là pign họa tiết hay RStudio sử dụng nó. Nó sai. – hrbrmstr

+0

@hrbrmstr Đó là một tuyên bố khá cấp tiến vì không đưa ra bất kỳ lý do nào đằng sau nó. Không phải đề cập đến họ đang mở để có dữ liệu của họ tải về để phân tích và cung cấp bãi chứa văn bản đơn giản của nó và các kỹ sư của họ đã giúp mọi người với các chương trình IMDB của họ. Họ nói rằng họ không ngại cạo, nhưng các chương trình bị hỏng mà không làm một công việc tốt của nó gây đau đầu. –

10

Đó 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.

Các vấn đề liên quan