2017-10-21 126 views
0

我試圖用rvest從維基百科(包括從其他網頁鏈接)拉ISO國家簡介。我找不到包含名稱的正確獲取鏈接(href屬性)的方法(我試過xpath字符串函數會導致錯誤)。運行起來相當容易 - 而且自我解釋。的R - 網頁刮痧 - 麻煩獲取屬性值使用rvest

任何幫助表示讚賞!

library(rvest) 
library(dplyr) 

searchPage <- read_html("https://en.wikipedia.org/wiki/ISO_3166-2") 
nodes <- html_node(searchPage, xpath = '(//h2[(span/@id = "Current_codes")]/following-sibling::table)[1]') 
codes <- html_nodes(nodes, xpath = 'tr/td[1]/a/text()') 
names <- html_nodes(nodes, xpath = 'tr/td[2]//a[@title]/text()') 
#Following brings back data but attribute name as well 
links <- html_nodes(nodes, xpath = 'tr/td[2]//a[@title]/@href') 
#Following returns nothing 
links2 <- html_nodes(nodes, xpath = 'tr/td[2]//a[@title]/@href/text()') 
#Following Errors 
links3 <- html_nodes(nodes, xpath = 'string(tr/td[2]//a[@title]/@href)') 
#Following Errors 
links4 <- sapply(nodes, function(x) { x %>% read_html() %>% html_nodes("tr/td[2]//a[@title]") %>% html_attr("href") }) 

回答

0

您應該在您的問題中包含更多信息。 「不言自明的」幾乎讓我忽略了這個問題(提示:考慮提供足夠的口頭細節以尊重他人的時間以及破碎的代碼)。

我說,B/C我不知道如果這是你需要什麼,或者沒有B/C,你真是沒的說。

library(rvest) 
library(tibble) 

pg <- read_html("https://en.wikipedia.org/wiki/ISO_3166-2") 

tab <- html_node(pg, xpath=".//table[contains(., 'Zimbabwe')]") 

iso_col <- html_nodes(tab, xpath=".//td[1]/a[contains(@href, 'ISO')]") 
name_col <- html_nodes(tab, xpath=".//td[2]") 

data_frame(
    iso2c = html_text(iso_col), 
    iso2c_link = html_attr(iso_col, "href"), 
    country_name = html_text(name_col), 
    country_link = html_nodes(name_col, xpath=".//a[contains(@href, 'wiki')]") %>% html_attr("href") 
) 
## # A tibble: 249 x 4 
## iso2c   iso2c_link   country_name    country_link 
## <chr>    <chr>    <chr>      <chr> 
## 1 AD /wiki/ISO_3166-2:AD    Andorra    /wiki/Andorra 
## 2 AE /wiki/ISO_3166-2:AE United Arab Emirates /wiki/United_Arab_Emirates 
## 3 AF /wiki/ISO_3166-2:AF   Afghanistan   /wiki/Afghanistan 
## 4 AG /wiki/ISO_3166-2:AG Antigua and Barbuda /wiki/Antigua_and_Barbuda 
## 5 AI /wiki/ISO_3166-2:AI    Anguilla    /wiki/Anguilla 
## 6 AL /wiki/ISO_3166-2:AL    Albania    /wiki/Albania 
## 7 AM /wiki/ISO_3166-2:AM    Armenia    /wiki/Armenia 
## 8 AO /wiki/ISO_3166-2:AO    Angola    /wiki/Angola 
## 9 AQ /wiki/ISO_3166-2:AQ   Antarctica   /wiki/Antarctica 
## 10 AR /wiki/ISO_3166-2:AR   Argentina   /wiki/Argentina 
## # ... with 239 more rows 
+0

謝謝!對不起,我認爲評論會足夠好,將來會嘗試着提供更多信息! –