MacOS 塞拉利昂 10.12.4。Chrome 63(最新)。R 1.1.383。
我正在使用 RSelenium 来抓取网络数据。我可以使用远程驱动程序提取数据,但实际的网页浏览器不会弹出供我查看。这使得调试一些比较棘手的网络拉取变得很困难。这是我想要发生的事情的示例视频。用户可以直观地看到他在浏览器中所做的更改 - 这篇文章的目的是找出为什么我在运行代码时无法直观地看到浏览器。
这是我从 RSelenium 中提取数据的过程的示例。
从航站楼:
(name)$ docker run -d -p 4567:4444 selenium/standalone-chrome
(name)$ docker ps
输出:
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
8de3a1cbc777 selenium/standalone-chrome "/opt/bin/entry_po..." 5 minutes ago Up 5 minutes 0.0.0.0:4567->4444/tcp wizardly_einstein
Run Code Online (Sandbox Code Playgroud)
在R中
library(RSelenium)
library(magrittr)
library(stringr)
library(stringi)
library(XML)
remDr <- rsDriver(port = 4567L, browser = "chrome")
remDr$client$open()
remDr$client$navigate("https://shiny.rstudio.com/gallery/datatables-options.html")
webElems <- remDr$client$findElements("css selector", "iframe")
remDr$client$switchToFrame(webElems[[1]])
elems <- remDr$client$findElements("css selector", "#showcase-app-container > nav > div > ul li") …Run Code Online (Sandbox Code Playgroud) 我正在用来dplyr转换大型数据框,并且我想将 DF 的最新日期 + 1 存储为值。我知道有更简单的方法可以通过分解语句来做到这一点,但我试图用一个管道语句来完成这一切。我遇到了一些问题,但我不确定为什么 R 会这样默认。例子:
Day <- seq.Date(as.Date('2017-12-01'), as.Date('2018-02-03'), 'day')
Day <- sample(Day, length(Day))
ID <- sample(c(1:5), length(Day), replace = T)
df <- data.frame(ID, Day)
foo <- df %>%
arrange(desc(Day)) %>%
mutate(DayPlus = as.Date(Day) + 1) %>%
select(DayPlus) #%>%
#slice(1)
foo <- foo[1,1]
Run Code Online (Sandbox Code Playgroud)
当我运行此代码时,变为等于所需的foo值。2018-02-04但是,当我运行未注释的代码时slice:
foo <- df %>%
arrange(desc(Day)) %>%
mutate(DayPlus = as.Date(Day) + 1) %>%
select(DayPlus) %>%
slice(1)
foo <- foo[1,1]
Run Code Online (Sandbox Code Playgroud)
foo保留为数据框。我的主要问题是为什么foo没有成为第二个示例中的值,我的第二个问题是是否有一种简单的方法可以将“2018-02-04”作为foo从一个dplyr …
我有一个来自二手来源的数据框,其中一列中包含许多关键信息,并用空格分隔。我不能简单地使用str_split,因为一些关键信息的名称中有空格,但它们前面有一个分组变量。以下是使用食物和食物组的示例:
foo1 <- paste('FRUIT', 'Apple', 'PROTEIN', 'Chicken', 'STARCH', 'Banana Bread', 'FRUIT', 'Strawberry')
foo2 <- paste('PROTEIN', 'Pork', 'FAT', 'Butter', 'FRUIT', 'Banana', 'STARCH', 'Spaghetti')
foo3 <- paste('FRUIT', 'Strawberry', 'PROTEIN', 'Lean Steak', 'FRUIT', 'Strawberry', 'STARCH', 'Potato')
df <- rbind(foo1, foo2, foo3)
df
foo1 "FRUIT Apple PROTEIN Chicken STARCH Banana Bread FRUIT Strawberry"
foo2 "PROTEIN Pork FAT Butter FRUIT Banana STARCH Spaghetti"
foo3 "FRUIT Strawberry PROTEIN Lean Steak FRUIT Strawberry Starch Potato"
Run Code Online (Sandbox Code Playgroud)
在这种情况下,我想要抓住的关键部分是实际的食物,但我无法分割空间,因为存在“香蕉面包”之类的东西。因此,我只能划分水果、蛋白质、淀粉或脂肪,但我想不出一个好方法来做到这一点。在我的实际表格中,仍然只有 4 个“分组”,但有超过 500 个单独的项目,因此尝试用空格映射特定的项目将是一个巨大的痛苦。以下几行不起作用:
str_split(df, c('FRUIT', 'PROTEIN', 'STARCH', 'FAT')) …Run Code Online (Sandbox Code Playgroud) 我有时间序列数据,我正在预测,所以我创建滞后变量用于我的统计分析.我想在给定特定输入的情况下快速创建多个变量,以便我可以轻松地交叉验证和比较模型.
以下是给定特定类别(A,B,C)的2个不同变量(总共4个)增加2个滞后的示例代码:
# Load dplyr
library(dplyr)
# create day, category, and 2 value vectors
days = 1:9
cats = rep(c('A','B','C'),3)
set.seed = 19
values1 = round(rnorm(9, 16, 4))
values2 = round(rnorm(9, 16, 16))
# create data frame
data = data.frame(days, cats, values1, values2)
# mutate new lag variables
LagVal = data %>% arrange(days) %>% group_by(cats) %>%
mutate(LagVal1.1 = lag(values1, 1)) %>%
mutate(LagVal1.2 = lag(values1, 2)) %>%
mutate(LagVal2.1 = lag(values2, 1)) %>%
mutate(LagVal2.2 = lag(values2, 2))
LagVal
days cats values1 values2 …Run Code Online (Sandbox Code Playgroud) 我正在学习如何进行网页抓取rvest,但遇到了一些问题。具体来说,代码仅拾取标题行。
library(rvest)
library(XML)
URL1 <- "https://swishanalytics.com/optimus/nba/daily-fantasy-salary-changes?date=2017-11-25"
df <- URL1 %>% read_html() %>% html_node("#stat-table") %>% html_table()
Run Code Online (Sandbox Code Playgroud)
调用df结果为 7 列 0 行的 data.frame。我安装了检查器小工具,即使这样也告诉我这id = #stat-table是正确的。该网站的独特之处在于它不想获取表格数据?
作为一个单独的问题,如果我“查看页面源代码”,我可以看到页面上的所有数据,并且我不必用来RSelenium翻阅 DK、FD 或 yahoo 工资。看起来有些键很容易找到(例如查找“FD”>查找所有“玩家名称:”并在后面拾取字符等),但我不知道处理该页面的库/进程来源。有这方面的资源吗?
谢谢。
我一直在使用webscraping XML::readHTMLTable,现在我正在努力学习如何在更细微的层面上进行搜索.我的动机来自于尝试在多个日子里在网站上刮一张桌子来改变位置(例如,昨天它是页面上的第4个表格,今天它是页面上的第2个表格,等等).我将使用一个以各种体育赛事发布维加斯赔率的网站为例,我将特别试图提取NBA数据.
URL1 = "http://www.scoresandodds.com/grid_20161123.html"
URL2 = "http://www.scoresandodds.com/grid_20161125.html"
Run Code Online (Sandbox Code Playgroud)
你会注意到NBA桌子是第一张桌子URL1,它是第二张桌子URL2.认识到NBA是第一个表格,以下是我如何将其作为第一个网址:
library(XML)
URL1 = "http://www.scoresandodds.com/grid_20161123.html"
exTable = readHTMLTable(URL1)[[1]] %>%
# Find first blank, since NBA is the first table #
head(which(exTable[,1] == "")[1] - 1)
Run Code Online (Sandbox Code Playgroud)
然后我会从那里清理它.我知道这不是最好的方法,甚至考虑到我想要循环多天,因为需要进行所有的清洁.学习如何抓取网页表中的特定对象会更好.
我已经玩了rvest一些,我知道我可以为Vegas线获得看起来像"td.line"的节点,但是我试图选择特定表格的节点(css = "#nba > div.sport"或其他东西?).我不一定想要这个具体例子的答案,但学习如何做这个例子将允许我将技能应用于许多其他情况.在此先感谢您的帮助.
r ×6
dplyr ×2
rvest ×2
html-parsing ×1
regex ×1
selenium ×1
split ×1
string ×1
web-scraping ×1