2010-09-19 56 views
19

Hai bài viết dưới đây là ví dụ tuyệt vời của phương pháp tiếp cận khác nhau của giải nén dữ liệu từ các trang web và phân tích nó thành R.Extract Liên kết từ trang web sử dụng R

Scraping html tables into R data frames using the XML package

How can I use R (Rcurl/XML packages ?!) to scrape this webpage

Tôi rất mới để lập trình và tôi chỉ mới bắt đầu với R, vì vậy tôi hy vọng câu hỏi này khá cơ bản, nhưng với những bài viết trên, tôi tưởng tượng nó là như vậy.

Tất cả những gì tôi muốn làm là trích xuất các liên kết phù hợp với một mẫu nhất định. Tôi cảm thấy như tôi có thể có thể sử dụng RCurl để đọc trong các trang web và trích xuất chúng phương pháp bạo lực bằng cách sử dụng biểu thức chuỗi. Điều đó nói rằng, nếu trang web được hình thành khá tốt, tôi sẽ làm như thế nào bằng cách sử dụng gói XML.

Khi tôi tìm hiểu thêm, tôi muốn "xem" dữ liệu khi tôi khắc phục sự cố. Vấn đề là một số cách tiếp cận này tạo ra danh sách danh sách các danh sách, v.v., vì vậy rất khó cho một người mới (như tôi) đi qua nơi tôi cần phải đi.

Một lần nữa, tôi rất mới với tất cả những gì là lập trình, vì vậy bất kỳ trợ giúp hoặc đoạn mã nào sẽ được đánh giá cao.

Trả lời

23

Tài liệu cho htmlTreeParse hiển thị một phương pháp. Dưới đây là một:

> url <- "http://stackoverflow.com/questions/3746256/extract-links-from-webpage-using-r" 
> doc <- htmlParse(url) 
> links <- xpathSApply(doc, "//a/@href") 
> free(doc) 

(Bạn có thể thả "href" thuộc tính từ các liên kết trở lại bằng cách "liên kết" thông qua "as.vector".)

trả lời trước đây của tôi:

Một cách tiếp cận là sử dụng gói stringr của Hadley Wickham, mà bạn có thể cài đặt với install.packages ("stringr", dep = TRUE).

> url <- "http://stackoverflow.com/questions/3746256/extract-links-from-webpage-using-r" 
> html <- paste(readLines(url), collapse="\n") 
> library(stringr) 
> matched <- str_match_all(html, "<a href=\"(.*?)\"") 

(tôi đoán số người có thể không chấp nhận sử dụng của regexp ở đây.)

matched là danh sách các ma trận, mỗi chuỗi đầu vào trong html vector - vì đó có chiều dài ai ở đây, phù hợp chỉ có một phần tử. Các kết quả phù hợp cho nhóm chụp đầu tiên nằm trong cột 2 của ma trận này (và nói chung, nhóm thứ i sẽ xuất hiện trong cột (i + 1)).

> links <- matched[[1]][, 2] 
> head(links) 
[1] "https://stackoverflow.com/users/login?returnurl=%2fquestions%2f3746256%2fextract-links-from-webpage-using-r" 
[2] "http://careers.stackoverflow.com"             
[3] "http://meta.stackoverflow.com"              
[4] "/about"                    
[5] "/faq"                    
[6] "/" 
+0

Cảm ơn. Khi tôi đang nghĩ đến việc sử dụng regex, tôi chắc chắn sẽ sử dụng gói của hadley. Tôi sẽ cung cấp cho một shot hàng đầu, nhưng tôi definatley nghĩ rằng đây là những gì tôi cần. – Btibert3

+0

Tôi thực sự thích việc sử dụng miễn phí (doc), tôi thậm chí không biết một chức năng như vậy tồn tại và tôi sẽ luôn luôn sử dụng nó từ bây giờ. –

-3

Wiki iMacros có một chương tuyệt đẹp trên web scraping. Mabe cung cấp cho bạn một số ý tưởng.

13

Thậm chí dễ dàng hơn với rvest:

library(xml2) 
library(rvest) 

URL <- "http://stackoverflow.com/questions/3746256/extract-links-from-webpage-using-r" 

pg <- read_html(URL) 

head(html_attr(html_nodes(pg, "a"), "href")) 

## [1] "//stackoverflow.com"                                   
## [2] "http://chat.stackoverflow.com"                                 
## [3] "//stackoverflow.com"                                   
## [4] "http://meta.stackoverflow.com"                                 
## [5] "//careers.stackoverflow.com?utm_source=stackoverflow.com&utm_medium=site-ui&utm_campaign=multicollider"              
## [6] "https://stackoverflow.com/users/signup?ssrc=site_switcher&returnurl=http%3a%2f%2fstackoverflow.com%2fquestions%2f3746256%2fextract-links-from-webpage-using-r" 
Các vấn đề liên quan