-
Notifications
You must be signed in to change notification settings - Fork 0
/
parser_everything_AVby.py
68 lines (61 loc) · 3.54 KB
/
parser_everything_AVby.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
import requests
from bs4 import BeautifulSoup
HOST = 'https://av.by/'
URL = 'https://cars.av.by/filter?brands'
def get_html(url):
HEADERS = {
'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8',
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) '
'AppleWebKit/537.36 (KHTML, like Gecko) '
'Chrome/108.0.0.0 '
'Safari/537.36',
}
req = requests.get(url, headers=HEADERS)
return req
def parse(html):
# Примерное максимальное количество страниц которое я смогла обнаружить для одной модели в принципе
count_s = 120
brand = 0
# Здесь не все модели, так что остальные программа будет пропускать
br = {'AlfaRomeo', 'Dodge', 'Kia', 'Nissan', 'Skoda', 'Audi', 'Fiat', 'Lada(ВАЗ)', 'Opel', 'Subaru', 'BMW',
'Ford', 'Lexus', 'Peugeot', 'Suzuki', 'Chevrolet', 'Geely', 'Mazda', 'Renault', 'Toyota', 'Chrysler', 'Honda',
'Mercedes-Benz', 'Rover', 'Volkswagen', 'Citroen', 'Hyundai', 'Mitsubishi', 'SEAT', 'Volvo'}
br_len = len(br)
control = 1
# Если программа нашла меньше моделей, чем в сете, то цикл будет продолжатся
while control <= br_len:
sum_list = []
brand += 1
# Объект супа ищущий действительную строку с моделями
soup = BeautifulSoup(get_html(html + f'[0][brand]={brand}').text, 'html.parser')
# если страница с моделью существует и отдает 200, идем дальше
if get_html(html + f'[0][brand]={brand}').status_code == 200:
soup_find = soup.find('span', class_='dropdown-floatlabel__value').text.replace(' ', '')
# Сравнивает полученное название с объектами сета
if soup_find in br:
control += 1
print(f'№{control}\n-{soup_find}-')
for i in range(1, count_s + 1):
# Создаем суп из страницы, находим все цены и поочередно добавляем в список.
# Повторяем пока страницы не кончатся
soup = BeautifulSoup(get_html(html + f'[0][brand]={brand}&page={i}').text, 'html.parser')
lict_new = soup.findAll('div', class_='listing-item__wrap')
for j in lict_new:
sum_list.append(int(j.find('div', class_='listing-item__price').text.replace('\xa0р.', '')
.replace('\u2009', '')))
else:
# вывод результата
sum_all = sum(sum_list)
resp = sum_all // len(sum_list)
print('Средняя цена', resp)
print('Максимальная цена', max(sum_list))
print('Минимальная цена', min(sum_list))
else:
# Если поймали то, что не нужно, отпускаем и движемся дальше
continue
else:
# Если страница отсутствует, движемся дальше
continue
else:
print('finish')
parse(URL)