在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 以了解解决方案。
抱歉,这个问题太复杂了,不能在这里问。我正在尝试重现位于 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