从HTML表格中提取数据

5
我正在尝试使用rvest包从CABI入侵物种百科全书中提取关于入侵植物物种位置的数据。通过查看一些教程,我已经知道可以相对容易地从表格中抓取数据。但是,我遇到了一些困难。假设我想获取Brassica tournefortii物种的位置数据。我应该能够使用下面的代码,该代码使用这里概述的技术来获取物种已被记录的位置的详细信息。
 library(rvest)
 isc<-read_html("http://www.cabi.org/isc/datasheet/50069")
 isc %>% 
 html_node("#toDistributionTable td:nth-child(1)") %>%
 html_text()

然而,运行此代码时我收到了错误。
Error: No matches

我完全不了解网络爬虫。我做错了什么吗?

1个回答

8

首先,我希望我能给你更多的赞。终于有一个与$SPORTSBALL或$MONEY无关的网络爬虫问题! :-)

那个网站很恶劣。它使用嵌入式命名空间,需要处理,这也意味着需要使用xml2包:

library(rvest)
library(xml2)

isc <- read_html("http://www.cabi.org/isc/datasheet/50069")

ns <- xml_ns(isc)

xml_text(xml_find_all(isc, xpath="//div[@id='toDistributionTable']/table/tbody/tr/td[1]", ns))

##  [1] "ASIA"                           "Azerbaijan"                    
##  [3] "Bhutan"                         "China"                         
##  [5] "-Tibet"                         "India"                         
##  [7] "-Delhi"                         "-Indian Punjab"                
##  [9] "-Rajasthan"                     "-Uttar Pradesh"                
## [11] "Iran"                           "Iraq"                          
## [13] "Israel"                         "Jordan"                        
## [15] "Kuwait"                         "Lebanon"                       
## [17] "Oman"                           "Pakistan"                      
## [19] "Qatar"                          "Saudi Arabia"                  
## [21] "Syria"                          "Turkey"                        
## [23] "Turkmenistan"                   "United Arab Emirates"          
## [25] "Uzbekistan"                     "Yemen"                         
## [27] "AFRICA"                         "Algeria"                       
## [29] "Egypt"                          "Libya"                         
## [31] "Morocco"                        "South Africa"                  
## [33] "Tunisia"                        "NORTH AMERICA"                 
## [35] "Mexico"                         "USA"                           
## [37] "-Arizona"                       "-California"                   
## [39] "-Nevada"                        "-New Mexico"                   
## [41] "-Texas"                         "-Utah"                         
## [43] "SOUTH AMERICA"                  "Chile"                         
## [45] "EUROPE"                         "Belgium"                       
## [47] "Cyprus"                         "Denmark"                       
## [49] "France"                         "Greece"                        
## [51] "Ireland"                        "Italy"                         
## [53] "Spain"                          "Sweden"                        
## [55] "UK"                             "-England and Wales"            
## [57] "-Scotland"                      "OCEANIA"                       
## [59] "Australia"                      "-Australian Northern Territory"
## [61] "-New South Wales"               "-Queensland"                   
## [63] "-South Australia"               "-Tasmania"                     
## [65] "-Victoria"                      "-Western Australia"            
## [67] "New Zealand"

太棒了,谢谢!这应该能帮助我开始从那个网站获取数据。您如何将信息放入xml_find_all函数的xpath部分? - Phil_Martin
1
我从右键单击并选择检查元素后在开发者工具中显示的路径中进行了映射。我可能可以使用CSS重新制作它,但是了解一些XPath在某些情况下会很有帮助。 - hrbrmstr

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接