Присвоение имени наблюдения значению при извлечении переменной - PullRequest
0 голосов
/ 11 июня 2018

Я хочу создать фрейм данных, содержащий> 100 наблюдений по ~ 20 переменным.Теперь это будет основано на списке HTML-файлов, которые сохраняются в моей локальной папке.Я хотел бы убедиться, что соответствующие значения для каждой переменной соответствуют каждому наблюдению.Предполагая, что R будет использовать один и тот же порядок просмотра файлов для создания каждой переменной, а не пропускать переменные в случае ошибок или чего-то подобного, это должно происходить автоматически.Но существует ли для этого «способ сохранения», означающий присвоение имен наблюдений каждому значению переменной при извлечении информации?

Возьмите мой пример кода для извлечения переменной, чтобы сделать ее более понятной:

#Specifying the url for desired website to be scrapped
url <- 'http://www.imdb.com/search/title? 
count=100&release_date=2016,2016&title_type=feature'

#Reading the HTML code from the website
webpage <- read_html(url)

title_data_html <- html_text(html_nodes(webpage,'.lister-item-header a'))
rank_data_html <- html_text(html_nodes(webpage,'.text-primary'))
description_data_html <- html_text(html_nodes(webpage,'.ratings-bar+ .text- 
muted'))

df <- data.frame(title_data_html, rank_data_html,description_data_html)

Это даст список данных ранга и описания, но без ссылки на название наблюдения дляранг или описание (перед тем, как связать его в df).Теперь, в моем реальном коде, одна переменная неожиданно приводит к слишком большому значению 1, так что в 201 описании есть только 200 фильмов.Не имея ссылки на то, к какому фильму относится описание, очень важно понять, почему это происходит.

Коллега предложил извлечь все переменные для 1 наблюдения за раз и расширить кадр данных построчно (1 наблюдение за раз) вместо расширения по столбцам (1 переменная за раз), но с определениемошибки и очистка каждой переменной кажутся намного более трудоемкими.

Есть ли у кого-нибудь предположения о том, что является "наилучшей практикой" в таком случае?

Спасибо!

1 Ответ

0 голосов
/ 12 июня 2018

Я знаю, что это не удовлетворительный ответ, но нет единой стратегии для решения этого типа проблемы.Это работа соскоба сети.Нет гарантии, что HTML будет структурирован так, как вы ожидаете, что он будет структурирован.

Вы не показали нам воспроизводимый пример (то, что мы можем запустить на нашем собственном компьютере, который воспроизводит вашу проблему), поэтому мы не можем помочь вам разобраться, почему вы в итоге извлекли 201 узел во времяодин вызов html_nodes, когда вы ожидали 200. Лучшей практикой здесь является скучный старый совет ПОСМОТРЕТЬ на веб-сайте, который вы просматриваете, ПОСМОТРЕТЬ свои данные и посмотреть, где находится дополнительное или дублирующее описание (или где отсутствует пропущенный фильм).Возможно, есть нечетный элемент с атрибутом, который также соответствует вашему тексту селектора xpath.Посмотрите как на сайте, как он выглядит в браузере, так и на источник.Щелкните правой кнопкой мыши, CTL + U (ПК) или OPT + CTL + U (Mac) - вот несколько способов получить исходный код.Используйте функцию поиска, чтобы увидеть, что соответствует тексту селектора.

Если HTML-документ, с которым вы работаете, похож на используемый вами пример, вы не сможете использовать нужную вам стратегию помощи.с (извлеките название фильма вместе с описанием).Вы уже извлекаете имена.Имена не находятся в тех же элементах, что и описания.

...