使用R

时间:2017-08-01 15:05:12

标签: html r wikipedia

即使根据所有可用的信息,我发现自己也无法解决以下问题(同时承认我已经离开了我的专家领域......)

我想要的:在有关城市的文章中从维基百科信息框中检索数据。为了简单起见:我想要Trüllikon的人口,这是相应维基百科文章的信息框内的信息。

到目前为止,我在此处查阅了相关问题:

library("RCurl")
library("XML")

link <- "https://de.wikipedia.org/wiki/Tr%C3%BCllikon"
site <- getURL(link)
site <- readLines(tc <- textConnection(site)); close(tc)

psite <- htmlTreeParse(site, error=function(...){}, useInternalNodes = TRUE)
对象psite中的

我看到以下几行:

</tr>
<tr>
<td style="border-bottom: 1px solid #eee; border-right: 1px solid #eee;">Einwohner:</td>
<td style="border-bottom: 1px solid #eee;"><span style="white-space:nowrap;">1014 <small>(31. Dezember 2015)</small><sup id="cite_ref-1" class="reference"><a href="#cite_note-1">[1]</a></sup></span></td>
</tr>

所以1014人(德语中的“Einwohner”)住在Trüllikon,但我不知道如何访问这些信息......我想到了xpathSApply - 函数(见相关问题),但是我无法适应我的问题

非常感谢任何帮助

更新

pop <- link %>%
  read_html() %>%
  html_nodes(xpath='//*[@id="mw-content-text"]/div/table[1]') %>%
  html_table()

r1 <- pop[[1]][ which(pop[[1]][,1] == "Einwohner:"),2]
r1
[1] "1014 (31. Dezember 2015)[1]"

(r1 <- sub(" .*", "", r1))
[1] "1014"

这可能不是最优雅的解决方案,也不确定这是否会阻碍其他城市。例如,如果我对Schlieren之城感兴趣,那么上面第一个表的引用就不正确了(在这种情况下,因为标题“Schlieren”在维基百科中并不是唯一的。)

link <- "https://de.wikipedia.org/wiki/Tr%C3%BCllikon"
link2 <- "https://de.wikipedia.org/wiki/schlieren"

pop <- link %>%
  read_html() %>%
  html_table()

pop2 <- link2 %>%
  read_html() %>%
  html_table()

# I'm interested in the first list for "Trüllikon"
str(pop)
List of 3
 $ :'data.frame':       16 obs. of  2 variables:
  ..$ Trüllikon: chr [1:16] "" "Staat:" "Kanton:" "Bezirk:" ...
  ..$ Trüllikon: chr [1:16] "" "Schweiz" "Zürich (ZH)" "Andelfingenw" ...
 $ :'data.frame':       7 obs. of  2 variables:
  ..$ Bevölkerungsentwicklung: chr [1:7] "Jahr" "1950" "1960" "1970" ...
  ..$ Bevölkerungsentwicklung: chr [1:7] "Einwohner" "895" "823" "724" ...
 $ :'data.frame':       1 obs. of  1 variable:

# I'm interested in the second list for "Schlieren"
str(pop2)
List of 3
 $ :'data.frame':       1 obs. of  2 variables:
  ..$ X1: logi NA
  ..$ X2: chr "Der Titel dieses Artikels ist mehrdeutig. Weitere Bedeutungen sind unter Schlieren (Begriffsklärung) aufgeführt."
 $ :'data.frame':       18 obs. of  2 variables:
  ..$ Schlieren: chr [1:18] "" "Staat:" "Kanton:" "Bezirk:" ...
  ..$ Schlieren: chr [1:18] "" "Schweiz" "Zürich (ZH)" "Dietikon" ...
 $ :'data.frame':       1 obs. of  1 variable:

0 个答案:

没有答案