Соскоб Tripadvisor Отзывы, Расположение - PullRequest
0 голосов
/ 03 мая 2018

Я пытаюсь собрать данные из TripAdvisor для 30 лучших ресторанов. Я смог получить список этих ресторанов. Кроме того, я могу успешно обработать данные для заголовка и даты обзора. Я использую BeautifulSoup и Requests для получения этих данных. Тем не менее, следующие проблемные области:

Во время очистки отзывов, во-первых, они не могут получить полную длину отзывов, а во-вторых, в некоторых местах есть ответы от владельцев, которые имеют тот же тег и класс, что и обзор, и, таким образом, также удаляются. Я хочу исключить эти ответы

Parse Link

link='https://www.tripadvisor.com.sg/Restaurant_Review-g294265-d1193730-Reviews-Entre_Nous_creperie-Singapore.html'
openlink=requests.get(link)
soup=bs.BeautifulSoup(openlink.text,'lxml')

Имя рецензента

rnamedata=soup.find_all('span',class_='expand_inline scrname')
rnames=[]
i=0
for i in range(len(rnamedata)):
rnames.append(rnamedata[i].text)
rnames[i]=rnames[i].replace("\n","")

Длина списка составляет 10

Текст отзыва

rdetaildata=soup.find_all('p',class_='partial_entry')
rdetails=[]
i=0
for i in range(len(rdetaildata)):
rdetails.append(rdetaildata[i].text)
rdetails[i]=rdetails[i].replace("\n","")

Длина списка составляет 20 из-за ответов от владельцев. Я хочу исключить эти ответы владельца. Кроме того, это дает только частичный обзор

Местоположение рецензента доступно не для всех пользователей, что хорошо, но как мне сделать так, чтобы я мог ввести «NA» против тех, кто не упомянул их местоположение. Из-за этого я не могу сопоставить местоположение с отзывами

Местонахождение отзыва

rlocdata=soup.find_all('span',class_='expand_inline userLocation')
rlocs=[]
i=0
for i in range(len(rlocdata)):
rlocs.append(rlocdata[i].text)
rlocs[i]=rlocs[i].replace("\n","")

Длина списка составляет 9, так как один рецензент не упомянул местоположение. Я хотел бы, чтобы длина была 10 с одной записью в качестве NA, для которой данные недоступны.

Вклад рецензента и полезные голоса также имеют один и тот же тег и класс, так как я могу разделить их по соответствующим категориям.

Обзор взносов

rcontridata=soup.find_all('span',class_='badgetext')
rcontri=[]
i=0
for i in range(len(rcontri)):
rcontri.append(rcontridata[i].text)
rcontri[i]=rcontri[i].replace("\n","")

Опять же, это дает список длиной 18, потому что он возвращает как данные о вкладе, так и полезные голоса, так как они имеют один и тот же тег и класс. Я хочу их в разных объектах

Спасибо за вашу помощь, ребята!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...