2015-08-30 2 views
3

Я пытаюсь изучить R из моего личного интереса к обучению. Ни кодер, ни аналитик. Я хотел получить отзывы пользователей от Trip Advisor. На одной странице у нас есть 10 отзывов, но с использованием нижеприведенных кодов я получаю нежелательные отзывы/строки. Я не уверен, использую ли я правильный узел html. Более того, я хочу получить полный обзор пользователя, но его окончание дает мне частичные отзывы пользователя. Не могли бы вы помочь мне в получении полных отзывов пользователей о счете 10? Большое вам спасибо за вашу помощь.Извлечение данных для пользователей

dat <- readLines("http://www.tripadvisor.in/Hotel_Review-g60763-d93450-Reviews-Grand_Hyatt_New_York-New_York_City_New_York.html", warn=FALSE) 
    raw2 <- htmlTreeParse(dat, useInternalNodes = TRUE) 
    ##User Review 
    plain.text <- xpathSApply(raw2, "//div[@class='col2of2']//p[@class='partial_entry']", xmlValue) 
    UR <-gsub("\\\n","",plain.text) 
    Result <- unlist(UR) 
    Result 

ответ

2

Это гораздо больше упражнений в веб-соскабливании, чем программирование на R.

В R, я предпочитаю пакет httr, чтобы захватить HTTP-ответ и извлечь содержимое в виде проанализированного html. Использование readLines(...) - это самый худший способ сделать это. Таким образом, приведенный ниже код будет извлекать резюме обзора.

library(httr) 
library(XML) 
url <- "http://www.tripadvisor.in/Hotel_Review-g60763-d93450-Reviews-Grand_Hyatt_New_York-New_York_City_New_York.html" 
response <- GET(url) 
doc  <- content(response,type="text/html") 
smry  <- xpathSApply(doc,'//div[@class="entry"]/p[@class="partial_entry"]',xmlValue) 
length(smry) 
# [1] 10 
smry[1] 
# [1] "\nThats all that matters really...I wonder if anyone would chose this hotel for any other factor at all...located right next to Grand central station in midtown and within walking distance of many tourist attractions, top restaurants and corp offices. Stayed 3 nights here on a business trip, I chose this hotel over others purely based on its location. Price is...\n\n\nMore \n\n" 

Получение полных обзоров является более сложным, поскольку оно включает в себя щелчок по кнопке «Дополнительно». Поэтому вам нужно определить, какие HTTP-запросы увольняются, когда вы нажимаете ссылку «Дополнительно» в ссылке. Вы можете сделать это, используя вкладку «Сетевой монитор» в инструментах разработчика Firefox (или многие другие инструменты, я уверен). Оказывается, что это ссылка вида:

http://www.tripadvisor.com/ExpandedUserReviews-g{xxx}-d{yyy}?querystring 

где {xxx} и {yyy} являются уникальными для отеля и такие же, как в оригинальном URL, и querystring полностью определены в инструменте Network Monitor. Таким образом, мы формируем новый http-запрос с этим URL-адресом и соответствующей строкой запроса и анализируем результат, как показано ниже.

cls <- doc['//div[@class="entry"]//span[contains(@class,"moreLink")]/@class'] 
xr.refno <- sapply(cls,function(x)sub(".*\\str(\\d+)\\s.*","\\1",x)) 
code  <- sub(".*Hotel_Review(\\-g\\d+\\-d\\d+)\\-Reviews.*","\\1",url) 
xr.url <- paste0("http://www.tripadvisor.com/ExpandedUserReviews",code) 
xr.response <- GET(xr.url,query=list(target=xr.refno[1], 
            context=1, 
            reviews=paste(xr.refno,collapse=","), 
            servlet="Hotel_Review", 
            expand=1)) 
xr.doc <- content(xr.response,type="text/html") 
xr.full <- xpathSApply(xr.doc,'//div[@class="entry"]/p',xmlValue) 
length(xr.full) 
# [1] 6 
xr.full[1] 
# [1] "\nThats all that matters really...I wonder if anyone would chose this hotel for any other factor at all...located right next to Grand central station in midtown and within walking distance of many tourist attractions, top restaurants and corp offices. Stayed 3 nights here on a business trip, I chose this hotel over others purely based on its location. Price is about average in NYC I think. Asked for a room with a good view and was given a 2 BR on the 30th floor. After checking in I realized there may not be the kind of view that I expected at all from any room in this hotel - due to it being surrounded by high rises in all directions. However, no other complaints as such - except may that the bathroom was a bit too cramped. That I guess is the norm in NYC. I would stay here again if it was a business visit based on the location. Faster than avg wifi (free) was a good plus.\n" 

Есть еще один нюанс/проблема. Обратите внимание, что существует только 6 «Расширенных обзоров». Это связано с тем, что короткие обзоры, которые соответствуют формату «Частичный обзор», не имеют кнопки «Больше». Поэтому вам нужно выяснить, какие частичные обзоры на самом деле полны. Поскольку вы говорите, что изучаете R, я оставлю это вам ...

+0

Спасибо ... Это действительно полезно для меня как ученика, и это даст мне массу возможностей для изучения новых вещей. Ваши объяснения кратки и мотивируют меня исследовать больше. Прямо сейчас я пытаюсь получить отзывы пользователей, у которых есть полные обзоры и полные обзоры «частичных обзоров» за один проход. Как вы упомянули, мы получаем 6 полных обзоров, которые являются «Расширенные обзоры». Можем ли мы получить еще 4 отзыва с этой страницы? Итак, всего 10 отзывов. – Kiwi

+0

Вам нужно будет найти идентификаторы всех частичных обзоров. Осмотрите html. – jlhoward

Смежные вопросы