【问题标题】:iterate over a list of url in r遍历 r 中的 url 列表
【发布时间】:2021-11-19 16:15:40
【问题描述】:

我想导入一个包含 url 列表的 txt,并从每个 url 中提取并将其保存在 cvs 文件中,但我卡住了

首先我导入 txt 没问题,但是当我想遍历每一行时,我只是从第一行中提取

library(rvest)
library(tidyr)
library(dplyr)

for(i in seq(list_url)) {
    text <- read_html(list_url$url[i]) %>%html_nodes("tr~ tr+ tr strong") %>%html_text()}

我只是从第一个 url 中获取值形式的结果,我想要从 url 中提取的所有数据帧

edit : list_ url 文件已满是这个 url..

http://consultas.pjn.gov.ar/cuantificacion/civil/vida_po_detalle_caso.php?numcas=_b8I7G9olKAukGNlsRE6RHSYaYPu8YLjhTEW15HEuj4http://consultas.pjn.gov.ar/cuantificacion/civil/vida_po_detalle_caso.php?numcas=ewwF4WmHAnOkCg8Y_XIFH705H_O5hJL9uB5hztOhrsEhttp://consultas.pjn.gov.ar/cuantificacion/civil/vida_po_detalle_caso.php?numcas=Z9BDo7ACNDbsUwTiVFTe9aKFfcLAxxnU2AtL6DCloX4http://consultas.pjn.gov.ar/cuantificacion/civil/vida_po_detalle_caso.php?numcas=NZPRa9SoKHVJQcZ64_4zVgcLSNKmHZ4MtorPu23MUPg.

【问题讨论】:

  • 能否提供list_url中的数据。请参阅stackoverflow.com/questions/5963269/… 寻求帮助
  • 您在每次传递中都覆盖了您的text 对象,不确定人们会有什么不同的期望。试试out &lt;- do.call(rbind, lapply(list_url, function(url) html_text(html_nodes(read_html(url), "..."))))
  • 我只是用 list_url 的数据举例
  • 请按原样提供列表,而不是指向网址的链接。你应该使用dput(list_url)。将 dput 的输出粘贴到您的问题中。

标签: r for-loop web rvest


【解决方案1】:

您应该创建一个输出对象,然后用您的函数填充该输出对象的每个元素“i”。照原样,您的代码只是将所有中间对象覆盖到同一个输出对象。

library(rvest)
library(tidyr)
library(dplyr)

text<-vector('list', length=length(list_url)) #create the output object
for(i in seq(list_url)) {
    text[[i]] <- read_html(list_url$url[i]) %>%html_nodes("tr~ tr+ tr strong") %>%html_text()}
text

【讨论】:

  • 谢谢,但它只返回第一个网址
  • 如果没有适当的可重现示例,我很难做到这一点。也许如果您提供 list_url 示例,我们可以为您提供更多帮助
  • 是的,我编辑它。谢谢
  • 请提供名单dput(list_url)
【解决方案2】:

您确定这是您在 text 变量中获得的第一个 URL 的结果吗?它应该是最后一个,因为每个循环 for 循环都会覆盖 text 中的值。

lapply() 非常适合这一点,并避免了 for 循环带来的问题。

这就是你想要实现的目标:

text <- 
  lapply(list_url$url,
         \(x) read_html(x) %>% 
           html_nodes("tr~ tr+ tr strong") %>% 
           html_text())

改用sapply(),您将得到一个向量而不是list。这可能对以下步骤有所帮助。您可能还想查找purrr,它提供了一套类似*apply() 的功能。

【讨论】:

  • 非常感谢,但现在我有这个错误.... open.connection(x, "rb") 中的错误:来自服务器的空回复
猜你喜欢
  • 1970-01-01
  • 2016-09-19
  • 2014-09-26
  • 2014-12-05
  • 1970-01-01
  • 1970-01-01
  • 2014-04-22
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多