在R中循环多个网页

Loop multiple webpages in R

抱歉,这个问题太复杂了,不能在这里问。我正在尝试重现位于 here 的 NYTime 方言地图可视化的 Hack Session。一开始我还好,但是当我尝试对多个页面进行转义时,我 运行 遇到了问题。

为了避免人们不得不从幻灯片中复制信息,这是我目前所拥有的:

创建 URL 个地址

mainURL <- 'http://www4.uwm.edu/FLL/linguistics/dialect/staticmaps/'
stateURL <- 'states.html'
url  <-  paste0(mainURL, stateURL)

下载并解析

tmp <- getURL(url)
tmp  <-  htmlTreeParse(tmp, useInternalNodes = TRUE)

提取页面地址并保存到子URL

subURL  <-  unlist(xpathSApply(tmp, '//a[@href]', xmlAttrs))

删除不是州名称的页面

subURL  <- subURL[-(1:4)]

我的问题是从原始幻灯片 24 开始的。幻灯片说 下一步是遍历状态列表并阅读每个问题的正文。当然,我们还需要保存进程中各个状态的名称。使用以下代码初始化循环:

survey <- vector(length(subURL), mode = "list")
i = 1
stateNames <-  rep('', length(subURL))

在此代码下方,幻灯片显示 survey 是一个列表,其中保存了有关每个州的信息。我有点不明白这是怎么回事,因为 survey 确实是一个长度为 51 的列表,但每个元素都是 NULL。我也对 i 在这里做什么感到困惑(这在以后变得很重要)。尽管如此,我仍然可以按照代码执行的操作进行操作,并且我假设稍后会填充该列表。

真正让我感到困惑的是下一张幻灯片。例如,显示 URL 如何包含每个州的名称,以阿拉斯加为例:

为第一个状态创建URL并赋值给suburl

 suburl  <- subURL[1]

从 suburl 中删除 state_

 stateName <- gsub('state_','',suburl)

从 stateName

中删除 .html
 stateName <- gsub('.html','',stateName)

到目前为止,还不错。我可以单独为每个州执行此操作。但是,我不知道如何将其变成适用于所有州的循环。幻灯片只有以下代码:

 stateNames[i] <- stateName

这就是我卡住的地方。上一张幻灯片将 1 分配给 i,因此唯一要做的就是获取阿拉斯加 (AK) 的名称,但其他所有元素都是“”(正如预期的那样,考虑到之前如何定义 stateNames ).

我确实尝试了以下方法:

 stateNames <- gsub('state_','',subURL)
 stateNames <-gsub('.html','',stateNames)

这不太行,因为这个vector的长度是51,而上面显示的长度只有1。(后来我想让每个状态都有自己的名字,而不是所有的各州具有相同的 51 个州名称)。此外,我不知道如何使用 stateNames(i) <- stateName 命令。

无论如何,我一直坚持到最后(包括原始版本和修改版本),希望事情最终会自行解决(有时我得到的结果与演示文稿中的相同),但最终东西刚刚坏了)。我认为幻灯片后面还有一个额外的问题(一个对象被子集化了,以前不存在),但我猜一个问题也来自一个更容易发生的问题。

无论如何,我知道这是一个非常复杂的问题,所以如果它不适合本网站,我深表歉意。我只是卡住了。

我相信我已经成功了。请参阅 gist or see 以了解解决方案。