R - поиск цикла Bing не полностью запущен - PullRequest
0 голосов
/ 04 декабря 2018

Я использовал цикл for для извлечения результатов поиска Bing по ряду имен знаменитостей («все $ имена») в сочетании с разными фруктами («ключевые слова»).Цикл сам по себе выполняется, но через некоторое время он застревает, и я получаю следующее сообщение об ошибке:

Error: 
1: XML declaration allowed only at the start of the document
2: Unescaped '<' not allowed in attributes values
3: xmlns:content: 'http ...' is not a valid URI
4: attributes construct error
5: Couldn't find end of Start Tag html line 2

Может быть, важно упомянуть, что мой фактический список имен («all $ name») содержит 195линии и мои фактические "ключевые слова" - это список из 101 строки (таким образом, ~ 20 тыс. комбинаций).Я не могу показать их здесь из-за конфиденциальности, извините.

При устранении неполадок кадр возвращаемых данных выглядит нормально, поэтому я предполагаю, что это некоторая проблема при разборе XML, как также указано в сообщении об ошибке.

Это код, который я использую:

search_results_matrix <- data.frame()

for(i in 1:length(keywords)){
  search_links <-  sapply(trimws(all$name),function(x)
  paste0(URLencode(
  'https://www.bing.com/searchcount=100&offset=0&format=rss&
  safeSearch=Off&q="')
  URLencode(x,reserved = T),
  URLencode( '" AND "'),
  URLencode(keywords[i],reserved = T),
  URLencode('"')))
  return <- getURIAsynchronous(search_links)

 search_results <- sapply(return, function(x) 
 length(xpathSApply(xmlParse(x), "//item//title",xmlValue)))

 search_results_matrix <- rbind(search_results_matrix,
 data.frame(name = trimws(all$name), keyword = keywords[i], 
 search_results, search_link = search_links))
 }

Это входные данные, которые вам понадобятся для воспроизведения примера:

keywords
## Avocado
## Banana
## Bilberry
## Blackberry
## Blackcurrant
## Blueberry
## Boysenberry
## Crab apples
## Currant
## Cherry

all
##   name
## 1 Julia Roberts
## 2 George Lucas
## 3 Oprah Winfrey
## 4 Tom Hanks
## 5 Michael Jordan
## 6 The Rolling Stones
## 7 Tiger Woods
## 8 Backstreet Boys
## 9 Cher
## 10 Steven Spielberg
...