Я пытаюсь собрать данные из 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, потому что он возвращает как данные о вкладе, так и полезные голоса, так как они имеют один и тот же тег и класс. Я хочу их в разных объектах
Спасибо за вашу помощь, ребята!