首页 > 解决方案 > 没有从网络抓取中将值输入到数据框中

问题描述

我的主要目标是从网站中提取内容。我想把它保存在本地。内容应该在网站上更新后,它也应该反映本地数据。
我能够从代码中使用的网页读取数据,现在我想将结果保存到数据框中,以便我可以导出结果。我希望 x6 的值应该输入到数据框 df 中,以便我可以将数据框结果导出到文本文件或 excel 文件中,或者您可以建议任何其他方式从代码中使用的网页中提取数据(网页抓取)。在此我希望我的 for 循环不起作用,所以请任何人帮助我。

library(rvest)
library(dplyr)
library(qdapRegex) # install.packages("qdapRegex")

google <- read_html("https://bidplus.gem.gov.in/bidresultlists")

(x <- google %>%
  html_nodes(".block") %>%
  html_text())

class(x)

(x1 <- gsub("                                                            ", "", x))
(x2 <- gsub("                                                        ", "", x1))
(x3 <- gsub("            ", "", x2))
(x4 <- gsub("    ", "", x3))
(x5 <- gsub("  ", "", x4))
(x6 <- gsub("\n", "", x5))

class(x6)
length(x6[i])
typeof(x6)

for (i in x6) {
  
  BIDNO <- rm_between(x6[i], "BID NO:", "Status", extract = TRUE)
  Status <- rm_between(x6[i], "Status:", "Quantity Required", extract = TRUE)
  Quantity_Required <- rm_between(x6[i], "Quantity Required:", "Department Name And Address", extract = TRUE)
  Department_Name_And_Address <- rm_between(x6[i], "Department Name And Address:", "Start Date", extract = TRUE)
  Start_Date <- rm_between(x6[i], "Start Date:", "End Date", extract = TRUE)
  # End_Date <- rm_between(x6[i], "End Date: ", "Technical Evaluation", extract=TRUE)

  df <- data.frame("BID_NO", "Status", "Quantity_Required", "Department_Name_Address", "Start_Date")
}

df

View(df)

标签: rweb-scrapingrvestremoving-whitespace

解决方案


问题似乎是您创建的是一堆带有“BID_NO”等引号的字符串。如果您尝试将值保存到数据框中,则需要将保存值的变量名称保存到数据框中。

df<-data.frame(BID_NO,Status,Quantity_Required,Department_Name_Address,Start_Date)

如果上面创建每个字段的所有代码都是正确的,并且值被保存到这些变量中,您将获得一个 ONE ROW 数据帧,因为它是在 for 循环中创建的,因此每次迭代时您都将覆盖上一个版本。

如果您希望保存多行,final_df请在循环之前创建。然后

data.frame(rbind(final_df, df))将在第一次通过时将数据行绑定到空帧,然后每次通过添加一个新行。

但是在循环中创建的任何数据帧都将在每次传递时重新创建并覆盖......并从变量中保存值而不 ' '在它们周围......


推荐阅读