Извлечение нескольких ключевых слов (в цикле) для нескольких стран в тенденциях Google

Я использую пакет gtrendsR для извлечения данных тенденций Google. Я понимаю, что этот пакет имеет ограничение максимум 5 "ключевых слов" за раз; поэтому я использовал цикл для извлечения> 5 «ключевых слов» за раз.

Теперь я хотел бы повторить это упражнение и для нескольких «стран», и хотел бы, чтобы результат показывал все возможные выходные данные Google Trend для каждой комбинации «ключевого слова» и «страны».

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

Country = readLines("country_list.csv")
Keyword = readLines("keyword_list.csv")
results <- list() 

for (i in Keyword) 
  {
  for (j in Country) {
    time=("today 3-m")
    channel='web'
    trends = gtrends(keyword=i, gprop =channel,geo=j, time = time)
    results [[j]] <- trends$interest_over_time
  }
} 

Out <- as.data.frame(do.call("rbind", results)) 

Я продолжаю получать ошибку:

Ошибка в get_widget(comparison_item, category, gprop, hl, cookie_url, : widget$status_code == 200 НЕ ИСТИНА

У меня в списках около 60 "стран" и 300 "ключевых слов". Это связано с невозможностью извлечения избыточных данных из Google Trends? Или какая-то фундаментальная ошибка

Кстати, я основной пользователь R; большое спасибо за помощь


person Wasiq Khurshid    schedule 14.05.2020    source источник


Ответы (2)


Коды ошибок, widget$status_code == 200, возвращаемые сервером, обычно хорошо описывают проблему, если вы просто вводите их в поиск Google. В вашем случае слишком много запросов за короткий промежуток времени. За каждые i в keyword вы звоните на сервер length(Country) раз. это много запросов за короткий период, и вы будете заблокированы. Либо установите какой-либо тайм-аут между вашими звонками, либо изучите хакерские методы скрейпера, такие как ротация заголовков/куки и т. д.

person Anna Nevison    schedule 14.05.2020

Я решил, загрузив gtrendsR из:

install.packages("remotes")
remotes::install_github("PMassicotte/gtrendsR")

(см. https://github.com/PMassicotte/gtrendsR/issues/166)

и используя следующее

Country = readLines("states.csv")
Keyword = readLines("celebs.csv")


for (i in Keyword) 
{
  for (j in Country) {
    time=("2018-01-01 2018-06-30")
    channel='web'
    trends = gtrends(keyword=i, gprop =channel,geo=j, time = time, onlyInterest = TRUE,low_search_volume = FALSE)
    Sys.sleep(5)
    results [[j]][[i]] <- trends$interest_over_time
  }
} 

person Chris Hydock    schedule 23.04.2021