尝试在 R 中进行一些网络抓取并可能需要一些帮助。
我想提取此页面表中的数据http://droughtmonitor.unl.edu/MapsAndData/DataTables.aspx
但我想首先从最左侧的下拉列表中选择县,然后从下一个下拉列表中选择阿拉米达县(CA),然后抓取表中的数据。
这是我到目前为止所拥有的,但我想我知道为什么它不起作用 - rvest 表单函数适合填写基本表单,而不是从 .aspx(?) 的下拉菜单中进行选择。四处寻找我想做的事情的例子,但一无所获。
library(rvest)
url <-"http://droughtmonitor.unl.edu/MapsAndData/DataTables.aspx"
pgsession <-html_session(url)
pgform <-html_form(pgsession)[[1]]
filled_form <- set_values(pgform,
`#atype_chosen span` = "County",
`#asel_chosen span` = "Alameda Count (CA)")
submit_form(pgsession,filled_form)
Run Code Online (Sandbox Code Playgroud)
无论如何,这给了我一个错误“错误:未知的字段名称:#atype_chosen span,#asel_chosen span”。我有点明白了...我要求 R 在框中输入县,而不打开下拉菜单,这是行不通的。
如果有人能指出我正确的方向,我将不胜感激。
我在底部添加了我使用的最终代码,以防有人有类似的问题。我使用了下面提供的答案,但添加了几个节点、系统睡眠时间(以防止被服务器踢出)和一个 if 参数,以防止在抓取最后一个有效页面后出现错误。
我正在尝试使用下一页功能从网站中提取多个页面。我创建了一个带有 nextpage 变量的数据框,并用起始 url 填充了第一个值。
#building dataframe with variables
bframe <- data.frame(matrix(ncol = 3, nrow = 10000))
x <- c("curpage", "nexturl", "posttext")
colnames(bframe) <- x
#assigning first value for nexturl
bframe$nexturl[[1]] <- "http://www.ashleyannphotography.com/blog/2017/04/02/canopy-anna-turner/"
Run Code Online (Sandbox Code Playgroud)
我想按如下方式提取文本(我知道代码很笨拙——我是全新的——但它确实得到了我想要的)
##create html object
blogfunc <- read_html("http://www.ashleyannphotography.com/blog/2017/04/02/canopy-anna-turner/")
##create object with post content scraped
posttext <- blogfunc %>%
html_nodes(".article-content")%>%
html_text()
posttext <- gsub('[\a]', '', blogfunc)
posttext <- gsub('[\t]', '', blogfunc)
posttext <- gsub('[\n]', '', blogfunc)
##scrape next url
nexturl <- blogfunc %>%
html_nodes(".prev-post-link-wrap a") %>% …Run Code Online (Sandbox Code Playgroud) 我想用来rvest抓取一个页面,其中包含最近一次会议上演讲的标题和运行时间,然后将这些值组合成一个tibble
library(tibble)
library(rvest)
url <- "https://channel9.msdn.com/Events/useR-international-R-User-conferences/useR-International-R-User-2017-Conference?sort=status&direction=desc&page=14"
title <- page %>%
html_nodes("h3 a") %>%
html_text()
length <- page %>%
html_nodes(".tile .caption") %>%
html_text()
df <- tibble(title,length)
Run Code Online (Sandbox Code Playgroud)
如果您查看该页面,您会发现其中一个演讲没有任何价值 - 而在查看源代码中,该class="caption"演讲没有任何价值
有什么方法可以替换 anNA来显示缺失值吗?
简短的问题:我想从一系列页面中抓取一系列 html_nodes。当这些元素位于没有任何类或 id 的列表中时,问题就出现了。我也不能使用 XPATH,因为所需元素的位置从一页到另一页不同,这取决于以前的信息。
详细资料:
html 代码(片段)如下所示:
<div class='heading'>Available at</div>
<ul class='list-unstyled'>
<li>
<img alt="The%20beach%20lab%20%28mobile%29" class="avatar tiny" src="...>
<a href="/labs/thebeachlab">The Beach Lab x Middle East</a>
</li>
<li>
<img alt="Default lab avatar" class="avatar tiny" src="...>
<a href="/labs/fabedcarolina">Fab Ed Carolina</a>
</li>
...
</ul>
Run Code Online (Sandbox Code Playgroud)
由于没有嵌套的类或 id,我唯一的选择是使用 Xpath,如下所示:
fablabs = url %>%
html_nodes(xpath = '/html/body/div[2]/div[2]/div[2]/ul[3]/li/a') %>%
html_text()
Run Code Online (Sandbox Code Playgroud)
不幸的是,虽然这适用于该页面,但不适用于其他页面,因为此列表的位置会根据其先前的内容在页面之间发生变化。
我唯一知道的是我想刮掉字符串下方的东西Available at。有没有办法在R中实现这一目标?
我需要从 URL 下载一系列 Excel 文件,所有文件如下所示:
\nhttp://example.com/orResultsED.cfm?MODE=exED&ED=01&EventId=31\nhttp://example.com/orResultsED.cfm?MODE=exED&ED=02&EventId=31\n...\nhttp://example.com/orResultsED.cfm?MODE=exED&ED=87&EventId=31\nRun Code Online (Sandbox Code Playgroud)\n\xc2\xa0
\n我在循环内有一些构建块,例如:
\nfor(i in 1:87) {\n url <- paste0("http://example.com/orResultsED.cfm?MODE=exED&ED=", i, "&EventId=31")\n file <- paste0("Data/myExcel_", i, ".xlsx")\n if (!file.exists(file)) download.file(url, file) \n}\nRun Code Online (Sandbox Code Playgroud)\n\xc2\xa0
\n我的问题:
\nseq前面加上 0 (我尝试过sprintf但没有运气)\xc2\xa0
\n@akrun 解决方案效果很好。但事实证明,并非所有 Excel 文件都具有相同的列数:
\nmap(files, ~read.xlsx(.x, \n colNames = FALSE,\n sheet = 1, \n startRow = 4,\n )) %>%\n bind_rows\n\nError in bind_rows_(x, .id) : …Run Code Online (Sandbox Code Playgroud) 我正在尝试通过阅读 XPath 代码来抓取网站。当我进入开发人员部分时,我看到这些行:
<span class="js-bestRate-show" data-crid="11232895" data-id="928723" data-abc="0602524361510" data-referecenceta="44205406" data-catalog="1">
Run Code Online (Sandbox Code Playgroud)
我想抓取 data-abc 的所有值。假设网站上的每个元素都是一部电影,所以我想抓取页面上每部电影的所有 data-abc 元素。
我想使用带有 R 的 Rvest 包来做到这一点。下面是两种不同的尝试,但没有成功...
website %>% html_nodes("js-bestRate-show") %>% html_text()
website %>%
html_nodes(xpath = "js-bestRate-show") %>%
html_nodes(xpath = "//div") %>%
html_nodes(xpath = "//span") %>%
html_nodes(xpath = "//data-abc")
Run Code Online (Sandbox Code Playgroud)
有人知道 html_nodes 和 Rvest 是如何工作的吗?
我有一个小问题,涉及在网站上发布搜索请求并使用 R 包 rvest 和 httr 显示结果...我只想对名称“Acer Campestre”进行一次搜索,然后仅勾选“匹配”框仅完整单词”。这是我的代码:
library(httr)
library(rvest)
col = POST(url="http://www.catalogueoflife.org/col",
encode="form",
body=list(text="Acer campestre",
fossil="0",
match="1",
submit="Search"))
col_html = read_html(col)
col_table = html_table(col_html,fill=T)
Run Code Online (Sandbox Code Playgroud)
我想我离答案不太远,但似乎我总是在使用这种使用html代码的命令时遇到麻烦...希望有人可以帮助我,提前感谢!
我对使用 R 和 xml 进行抓取非常陌生,我有一个关于保存和加载数据集的问题。
我使用如下代码抓取了一个相当大的数据集
data<-list()
for(i in page[1:10]){
pages<-read_html(paste0("http://www.gbig.org/buildings/", i))
nodes<-html_nodes(pages, '.badge-info .cert-badge , .event ,
.date , .media-heading a , .truncated , .location , .buildings-type')
data[[i]] <-nodes
}
Run Code Online (Sandbox Code Playgroud)
我以为我可以保存数据并再次加载以备将来使用
save(data, file="trials.RData")
Run Code Online (Sandbox Code Playgroud)
当我加载它并尝试再次使用它时,我收到一条错误消息。我做错了什么?保存和加载 xml 节点的最佳方法是什么?
{xml_nodeset (10)}
Error in node_write_character(x$node, options = options, encoding = encoding) :
external pointer is not valid
Run Code Online (Sandbox Code Playgroud)
编辑
我尝试的加载命令是:
load("trials.RData")
Run Code Online (Sandbox Code Playgroud)
谢谢
我正在尝试从此表中提取所有玩家链接:
https://www.footballdb.com/players/players.html?letter=A
这是我的代码的样子:
library(rvest)
url <- "https://www.footballdb.com/players/players.html?letter=A"
webpage <- read_html(url)
webpage %>%
html_nodes("table") %>%
html_attr("href")
Run Code Online (Sandbox Code Playgroud)
这将返回一个 NA。我看过其他有类似问题的帖子,但我未能很好地理解答案以将它们应用于这个问题。任何解决方案和/或指导将不胜感激。谢谢。
有人可以帮助我或给我一些建议如何从这个网址抓取表格: https: //www.promet.si/portal/sl/stevci-prometa.aspx。
我尝试使用说明和包rvest、httr 和 html但对于这个特定的站点没有任何成功。谢谢。