Когда сортирyю сайт по рейтингy, то url остаётся таким же, из-за чего не полyчается спарсить по рейтингy. Что в таком слyчае делать?
Парсинг на python, bs4, requests. Когда сортирyю сайт по рейтингy, то url остаётся таким же, из-за чего не полyчается спарсить по рейтингy. Тоесть т.к url не меняется, то парсится без сортировки. Что делать чтобы парсило?
import requests
from bs4 import BeautifulSoup
def parse():
url = 'https://tropki.ru/rossiya/dagestan/gde-ostanovitsa'
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.138 YaBrowser/20.6.1.151 Yowser/2.5 Yptp/1.23 Safari/537.36'}
response = requests.get(url, headers=headers, verify=False)
soup = BeautifulSoup(response.text, 'html.parser')
items = soup.findAll('div', class_='info-wrapper')
items2 = soup.findAll('div', class_='reviews-column')
all_rate = []
all_names = []
all_links = []
all_money = []
for item in items:
name = item.find('a').get('title')
link = 'https://tropki.ru' + item.find('a').get('href')
all_names.append(name)
all_links.append(link)
for item in items2:
kol = item.find('div', class_='rating-txt').get_text(strip=True)
if kol == 'Прекрасно':
price = item.find('div', class_='rating tooltip rating-excellent').get('title')
elif kol == 'Отлично':
price = item.find('div', class_='rating tooltip rating-verygood').get('title')
price = price.replace('<br>', ' ')
all_rate.append(price[:-12])
for i in all_links:
response = requests.get(i, headers=headers, verify=False)
soup = BeautifulSoup(response.text, 'html.parser')
items3 = soup.findAll('div', class_='price-wrapper2')
for z in items3:
try:
price = z.find('div', class_='price-wrapper').get_text(strip=True)
all_money.append(price)
except:
all_money.append('-')
all = []
num = len(all_money)
for i in range(num):
all.append((all_names[i], all_rate[i], all_money[i], all_links[i]))
all = sorted(all, key=lambda x: -float(x[1][8:12]))
for i in all:
print(f'Название:{i[0]}\n'
f'Рейтинг:{i[1]}\n'
f'Стоимость:{i[2]}\n'
f'Ссылка:{i[3]}\n'
)
parse()
Ответы (1 шт):
Автор решения: CrazyElf
→ Ссылка
С минимальной переделкой вашего кода, если я правильно понял задачу:
import requests
from bs4 import BeautifulSoup
def parse():
url = 'https://tropki.ru/rossiya/dagestan/gde-ostanovitsa'
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.138 YaBrowser/20.6.1.151 Yowser/2.5 Yptp/1.23 Safari/537.36'}
response = requests.get(url, headers=headers, verify=False)
soup = BeautifulSoup(response.text, 'html.parser')
items = soup.findAll('div', class_='info-wrapper')
items2 = soup.findAll('div', class_='reviews-column')
all_rate = []
all_names = []
all_links = []
all_money = []
for item in items:
name = item.find('a').get('title')
link = 'https://tropki.ru' + item.find('a').get('href')
all_names.append(name)
all_links.append(link)
for item in items2:
kol = item.find('div', class_='rating-txt').get_text(strip=True)
if kol == 'Прекрасно':
price = item.find('div', class_='rating tooltip rating-excellent').get('title')
elif kol == 'Отлично':
price = item.find('div', class_='rating tooltip rating-verygood').get('title')
price = price.replace('<br>', ' ')
all_rate.append(price[:-12])
all = []
num = len(all_links)
for i in range(num):
all.append([all_names[i], all_rate[i], 0, all_links[i]])
all = sorted(all, key=lambda x: -float(x[1][8:12]))
for a in all:
print('парсим рейтинг', a[1])
response = requests.get(a[3], headers=headers, verify=False)
soup = BeautifulSoup(response.text, 'html.parser')
items3 = soup.findAll('div', class_='price-wrapper2')
for z in items3:
try:
price = z.find('div', class_='price-wrapper').get_text(strip=True)
a[2] = price
except:
a[2] = '-'
all = sorted(all, key=lambda x: -float(x[1][8:12]))
for i in all:
print(f'Название:{i[0]}\n'
f'Рейтинг:{i[1]}\n'
f'Стоимость:{i[2]}\n'
f'Ссылка:{i[3]}\n'
)
parse()
Конечно, тут бы лучше отдельный класс сделать с инкапсуляцией названия, рейтинга и т.д., но и так работает, хоть код и не красивый.
парсим рейтинг Рейтинг 9.4 из 10 на основе 201 отзыва
парсим рейтинг Рейтинг 9.4 из 10 по отзывам
парсим рейтинг Рейтинг 9.0 из 10 на основе 68 отзывов
парсим рейтинг Рейтинг 9.0 из 10 на основе 164 отзывов
парсим рейтинг Рейтинг 9.0 из 10 на основе 199 отзывов
парсим рейтинг Рейтинг 8.8 из 10 по отзывам
парсим рейтинг Рейтинг 8.8 из 10 на основе 22 отзывов
парсим рейтинг Рейтинг 8.8 из 10 по отзывам
парсим рейтинг Рейтинг 8.8 из 10 на основе 395 отзывов
парсим рейтинг Рейтинг 8.7 из 10 на основе 70 отзывов
парсим рейтинг Рейтинг 8.7 из 10 на основе 270 отзывов
парсим рейтинг Рейтинг 8.6 из 10 на основе 72 отзывов
парсим рейтинг Рейтинг 8.5 из 10 на основе 83 отзывов
парсим рейтинг Рейтинг 8.4 из 10 на основе 379 отзывов
парсим рейтинг Рейтинг 8.4 из 10 по отзывам
парсим рейтинг Рейтинг 8.2 из 10 на основе 5 отзывов
парсим рейтинг Рейтинг 8.2 из 10 на основе 60 отзывов
парсим рейтинг Рейтинг 8.1 из 10 на основе 73 отзывов
парсим рейтинг Рейтинг 8.0 из 10 на основе 187 отзывов
парсим рейтинг Рейтинг 8.0 из 10 на основе 5 отзывов