Вы закрываете это сейчас

ытался отказаться от Finviz для некоторой ключевой статистики запаса. Я применил коды из оригинального вопроса:Сканирование ключевых статистических данных в Yahoo! Финансы с R, Чтобы собрать статистику по как можно большему количеству акций, я создаю список символов акций и их описания:

Symbol Description
A      Agilent Technologies
AAA    Alcoa Corp
AAC    Aac Holdings Inc
BABA   Alibaba Group Holding Ltd
CRM    Salesforce.Com Inc
...

Я выбрал первый столбец и сохранил его как символ в R и назвал его запасами. Затем я применил код:

for (s in stocks) {
url <- paste0("http://finviz.com/quote.ashx?t=", s)
webpage <- readLines(url)
html <- htmlTreeParse(webpage, useInternalNodes = TRUE, asText = TRUE)
tableNodes <- getNodeSet(html, "//table")

# ASSIGN TO STOCK NAMED DFS
assign(s, readHTMLTable(tableNodes[[9]], 
                      header= c("data1", "data2", "data3", "data4", "data5", "data6",
                                "data7", "data8", "data9", "data10", "data11", "data12")))

# ADD COLUMN TO IDENTIFY STOCK 
df <- get(s)
df['stock'] <- s
assign(s, df)
}

# COMBINE ALL STOCK DATA 
stockdatalist <- cbind(mget(stocks))
stockdata <- do.call(rbind, stockdatalist)
# MOVE STOCK ID TO FIRST COLUMN
stockdata <- stockdata[, c(ncol(stockdata), 1:ncol(stockdata)-1)]

Однако для некоторых акций у Finviz нет страницы для них, и я получаю сообщения об ошибках вроде этого:

Error in file(con, "r") : cannot open the connection
In addition: Warning message:
In file(con, "r") :
cannot open URL 'http://finviz.com/quote.ashx?t=AGM.A': HTTP status was '404 
Not Found'

Есть много акций, которые имеют такую ​​ситуацию, поэтому я не могу удалить их из своего списка вручную. Есть ли способ пропустить получение страницы для этих акций? Заранее спасибо!

Ответы на вопрос(1)

Решение Вопроса

что-то в этих строках? Попытка отфильтровать акции перед использованием forloop.

    library(tidyverse)

#AGM.A should produce error
    stocks <- c("AXP","BA","CAT","AGM.A")
    urls <- paste0("http://finviz.com/quote.ashx?t=", stocks)

#Test urls with possibly first and find out NAs
    temp_ind <- map(urls, possibly(readLines, otherwise = NA_real_))
    ind <- map_lgl(map(temp_ind, c(1)), is.na)
    ind <- which(ind == TRUE)
    filter.stocks <- stocks[-ind]

#AGM.A is removed and you can just insert stocks which work to for loop.
        filter.stocks
    [1] "AXP" "BA"  "CAT"

Как указал statxiongurl.exist вот более простая версия:

library(RCurl)
library(tidyverse)

stocks[map_lgl(urls, url.exists)]
 Hakki21 нояб. 2017 г., 21:20
Вы закрываете это сейчас
 Hakki21 нояб. 2017 г., 20:45
Я добавил, что там тоже для будущего использования
 statxiong21 нояб. 2017 г., 20:37
Спасибо, Хакки, это действительно полезно! Я также нашел эту функцию url.exists из пакета RCurl, которая может определить, отвечает ли запрос на определенный URL без ошибок

Ваш ответ на вопрос