2012-09-05 37 views
8

Tôi đang cố trích xuất các liên kết từ trang web sau đây http://ipt.humboldt.org.co/ thuộc loại "Mẫu". Tôi có thể lấy bảng từ trang web bằng cách sử dụng mã sau:Trích xuất các liên kết từ bảng html

library(XML) 
sitePage<-htmlParse("http://ipt.humboldt.org.co/") 
tableNodes<-getNodeSet(sitePage,"//table") 
siteTable<-readHTMLTable(tableNodes[[1]]) 

Tuy nhiên, các liên kết bị thiếu sau khi tôi sử dụng lệnh readHTML.

Trả lời

10

Rốt cuộc nó cũng trở thành một biểu thức XPath phức tạp:

library(XML) 
sitePage<-htmlParse("http://ipt.humboldt.org.co/") 
hyperlinksYouNeed<-getNodeSet(sitePage,"//table[@id='resourcestable'] 
             //td[5][.='Specimen'] 
             /preceding-sibling 
             ::td[3] 
             /a 
             /@href") 

nhưng hãy để tôi giải thích các biểu thức XPath bit-by-bit:

  • //table[@id='resourcestable'] -> Bằng cách này chúng tôi đang nhận được chính bảng trên trang có tên 'resourcestable'

  • //td[5][.='Specimen'] -> Bây giờ, chúng tôi chỉ lọc những hàng có Loại là Mẫu

  • /preceding-sibling -> Bây giờ chúng ta bắt đầu nhìn lại một quãng

  • ::td[3] -> 3 bước để được đếm chính xác ngược từ nơi mà chúng ta đang có. Hãy cẩn thận trước-sibling bắt đầu đếm ngược do đó td [1] là Loại cột, td [2] là Tổ chức cột và td [3] là Tên cột chúng ta muốn.

  • /a -> Bây giờ có được bao gồm một nút

  • /@href - nội dung> và cuối cùng chính xác hơn các thuộc tính href

5
xmlFun<-function(x){ 
    y<-xpathSApply(x,'./a',xmlAttrs) 
    if(length(y)>0){ 
     list(href=y,orig=xmlValue(x)) 
    }else{ 
     xmlValue(x) 
    } 
} 
ans<-readHTMLTable(tableNodes[[1]],elFun=xmlFun,stringsAsFactors = FALSE) 
ans$Name<-lapply(ans$Name,function(x){unlist(eval(parse(text=x)))}) 
ans$Name[ans$Subtype=='Specimen'] 
Các vấn đề liên quan