ранжирование хоста в Airbnb для определенного города или местоположения

#python-3.x #web-scraping

#python-3.x #очистка веб-страниц

Вопрос:

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

 from bs4 import BeautifulSoup # BeautifulSoup is in bs4 package 
import requests

URL = input("Please enter an URL to the number of reviews n")
#'https://www.airbnb.co.in/users/show/154131896'
content = requests.get(URL)

soup = BeautifulSoup(content.text, 'html.parser')

row = soup.find('div') 
#Extract and return first occurrence          
print("=========Text Result==========")
print(row.get_text())
#Print row as text

divs = soup.find_all('div', { "class" : "_5kaapu"})
#Find all the records  for reviews
for i in divs:

childr = i.findChildren("span" , recursive=False)
for child in childr:
    iwant = child.text
    print(iwant)

contentTable  = soup.find('div', { "class" : "_5kaapu"}) 
# Use dictionary to pass key : value pair
rows  = contentTable.find_all('span',{"class": "_1ax9t0a"})
for row in rows:
     print(" The host have ", row.get_text()) 
  

Ответ №1:

Одним из способов сделать это было бы:

 from bs4 import BeautifulSoup
import requests

content = requests.get('https://www.airbnb.co.in/users/show/154131896')

soup = BeautifulSoup(content.text, 'html.parser').find_all('span', {"class": "_krjbj"})

for item in soup[:2]:
    print(item.text)
  

Это выводит:

 Rating 4.97 out of 5;
36 reviews
  

Комментарии:

1. На самом деле я хотел ранжирование хоста среди других хостов, а не рейтинги.

2. Существует ли такой рейтинг? Если да, можете ли вы поделиться URL-адресом?

3. Поскольку у Airbnb нет API, поэтому я хочу рассчитать рейтинг в зависимости от рейтингов других хостов для города или местоположения!! так возможно ли это !!??

4. Что ж, вам придется очистить рейтинги всех пользователей для данного местоположения, а затем выполнить вычисления самостоятельно.

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

Ответ №2:

Высокая вероятность того, что имена классов будут меняться, чтобы избежать очистки. Вы можете попробовать подход, использующий некоторую regex логику для определения хороших тегов :

 import re
from bs4 import BeautifulSoup
import requests

response = requests.get('https://www.airbnb.co.in/users/show/154131896')
soup = BeautifulSoup(response.content, 'html.parser')

#Regex pattern to find the tag containing the rating
pattern = r'Rating (.*?) out of'

rating_tag = soup.find('span',text = re.compile(pattern))
rating_value = float(re.findall(pattern, rating_tag.text)[0])

#Finding the tag containing the reviews count
reviews_tag = rating_tag.findNext('span', text= re.compile(' review'))
reviews_value = int(re.findall(r'd ',reviews_tag.text)[0])

print(f'User rating is: {rating_value} over {reviews_value} votes')
  

Вывод:

 User rating is: 4.97 over 36 votes