#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