标签: rvest

网页抓取:从下拉列表中选择字段,提取结果数据

尝试在 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 在框中输入县,而不打开下拉菜单,这是行不通的。

如果有人能指出我正确的方向,我将不胜感激。

html asp.net r rvest

2
推荐指数
1
解决办法
1818
查看次数

“下一页” rvest 刮擦的功能

我在底部添加了我使用的最终代码,以防有人有类似的问题。我使用了下面提供的答案,但添加了几个节点、系统睡眠时间(以防止被服务器踢出)和一个 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)

r scrape rvest

2
推荐指数
1
解决办法
2248
查看次数

使用 rvest 抓取时,在缺失值的地方输入 NA

我想用来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来显示缺失值吗?

r rvest tibble

2
推荐指数
1
解决办法
2570
查看次数

是否可以在某些文本字符串之后抓取一系列节点?

简短的问题:我想从一系列页面中抓取一系列 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中实现这一目标?

xpath r rvest

2
推荐指数
1
解决办法
204
查看次数

使用 R 循环遍历 url

我需要从 URL 下载一系列 Excel 文件,所有文件如下所示:

\n
http://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\n
Run Code Online (Sandbox Code Playgroud)\n

\xc2\xa0

\n

我在循环内有一些构建块,例如:

\n
for(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}\n
Run Code Online (Sandbox Code Playgroud)\n

\xc2\xa0

\n

我的问题

\n
    \n
  1. 我需要在seq前面加上 0 (我尝试过sprintf但没有运气)
  2. \n
  3. 我还想导入 Excel 文件,跳过前两行并将它们附加到另一行之后(它们也具有相同的列)
  4. \n
\n

\xc2\xa0

\n

更新

\n

@akrun 解决方案效果很好。但事实证明,并非所有 Excel 文件都具有相同的列数:

\n
map(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)

loops r web-scraping rvest

2
推荐指数
1
解决办法
3103
查看次数

Rvest html_nodes span div 和 Xpath

我正在尝试通过阅读 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 是如何工作的吗?

xpath r rvest

2
推荐指数
1
解决办法
4865
查看次数

R - 在网站上发送搜索请求

我有一个小问题,涉及在网站上发布搜索请求并使用 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 web-scraping rcurl httr rvest

2
推荐指数
1
解决办法
1698
查看次数

在 R 中保存 xml 节点

我对使用 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)

谢谢

xml r rvest

2
推荐指数
1
解决办法
1207
查看次数

数据抓取;使用 rvest 从表中提取链接

我正在尝试从此表中提取所有玩家链接:

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。我看过其他有类似问题的帖子,但我未能很好地理解答案以将它们应用于这个问题。任何解决方案和/或指导将不胜感激。谢谢。

r web-crawler web-scraping rvest

2
推荐指数
1
解决办法
268
查看次数

使用 R 抓取“aspx”页面

有人可以帮助我或给我一些建议如何从这个网址抓取表格: https: //www.promet.si/portal/sl/stevci-prometa.aspx

我尝试使用说明和包rvesthttr 和 html但对于这个特定的站点没有任何成功。谢谢。

r web-scraping httr rvest

2
推荐指数
1
解决办法
1337
查看次数

标签 统计

r ×10

rvest ×10

web-scraping ×4

httr ×2

xpath ×2

asp.net ×1

html ×1

loops ×1

rcurl ×1

scrape ×1

tibble ×1

web-crawler ×1

xml ×1