Skip to content

Commit b0c977b

Browse files
committed
feat(parser): version 2.1.0
1 parent 7f97257 commit b0c977b

7 files changed

+28
-21
lines changed

AvitoParser.py

+2-2
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
from loguru import logger
88
from notifiers.logging import NotificationHandler
99

10-
__VERSION__ = "2.0.5"
10+
__VERSION__ = "2.1.0"
1111

1212
from lang import *
1313
from parser_cls import AvitoParse
@@ -50,7 +50,7 @@ def set_up():
5050
max_view.value = config["Avito"].get("MAX_VIEW")
5151
keyword_input.value = "\n".join(config["Avito"]["KEYS"].split(","))
5252
black_keyword_input.value = "\n".join(config["Avito"].get("KEYS_BLACK", "").split(","))
53-
max_price.value = config["Avito"].get("MAX_PRICE", "0")
53+
max_price.value = config["Avito"].get("MAX_PRICE")
5454
min_price.value = config["Avito"].get("MIN_PRICE", "0")
5555
geo.value = config["Avito"].get("GEO", "")
5656
proxy.value = config["Avito"].get("PROXY", "")

README.md

+6-5
Original file line numberDiff line numberDiff line change
@@ -1,25 +1,26 @@
1-
## Avito Parser v.2.0
1+
## Avito Parser v.2.1.0
22

33
Находит объявления на avito.ru. Бесплатно
44

55
### Возможности
66

77
- Удобное управление с помощью графического интерфейса
88
- Кроссплатформенность
9-
- Поддержка до 5 ссылок для отслеживания
9+
- Поддержка до 50 ссылок для отслеживания
1010
- Поддержка прокси
1111
- Постоянная проверка новых объявлений
1212
- Установка количества проверяемых страниц
1313
- Установка паузы между повторами
1414
- Уведомление в telegram как опция (может быть несколько получателей), также результат сохраняется в result/keyword*.csv и выводится в окно
1515
- Хранение уже просмотренных объявлений, т.е. дубли игнорируются
16+
- Обнаружения изменения цены для уже просмотренных объявлений
1617
- Автоматический обход бана по IP со стороны Авито
17-
- Присылает только объявления, которые подходят под нужные параметры (слова-ключи, гео, цена), если они указаны конечно
18+
- Присылает только объявления, которые подходят под нужные параметры (слова-ключи, стоп-слова, гео, цена, макс. кол-во просмотров), если они указаны конечно
1819
- Несколько режимов работы и запуска
1920
- Возможность запускать на сервере (без браузера и графического интерфейса)
2021

2122
### Обзор возможностей и другие детали:
22-
[youtube](https://youtu.be/94iN7-K13VM) - обзор последней версии, настоятельно рекомендую посмотреть
23+
[youtube](https://youtu.be/q3BlBiLId40) - обзор последней версии, настоятельно рекомендую посмотреть
2324

2425
[youtube playlist](https://www.youtube.com/playlist?list=PLK9kK8z0fpqxPakGZvxo7y6HtCBTYihUF) - плейлист о том, как это создавалось
2526

@@ -30,7 +31,7 @@
3031
При покупке обязательно выбирайте страну "Россия"
3132

3233
### Установка
33-
Если Ваша платформа - Windows 10 или 11, можете использовать портативную версию [скачать](https://disk.yandex.by/d/ChuNTMkr3htfGA) (обновлено 05.12.2024), распаковать архив, запустить parse_avito.exe). Первый запуск может длиться около 1 минуты - это нормально. В этом случае никаких зависимостей устанавливать не нужно.
34+
Если Ваша платформа - Windows 10 или 11, можете использовать портативную версию [скачать](https://disk.yandex.by/d/PdX-1By1l0zCAA) (обновлено 15.12.2024), распаковать архив, запустить parse_avito.exe). Первый запуск может длиться около 1 минуты - это нормально. В этом случае никаких зависимостей устанавливать не нужно.
3435

3536

3637
Для работы требуется Python 3.11+. Скопируйте проект и установите зависимости:

custom_exception.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,3 @@
11

22
class StopEventException(Exception):
3-
pass
3+
pass

parser_cls.py

+3-3
Original file line numberDiff line numberDiff line change
@@ -174,7 +174,7 @@ def __parse_other_data(self, item_info_list: list):
174174
if not self.geo.lower() in str(item_info.get("geo")).lower():
175175
continue
176176

177-
if self.max_views and self.max_views >= int(item_info.get("views", 0)):
177+
if self.max_views and int(self.max_views) <= int(item_info.get("views", 0)):
178178
logger.info("Количество просмотров больше заданного. Пропускаю объявление")
179179
continue
180180

@@ -217,7 +217,7 @@ def __parse_full_page(self, data: dict) -> dict:
217217
return data
218218

219219
"""Гео"""
220-
if self.geo and self.driver.find_elements(LocatorAvito.GEO[1], by="css selector"):
220+
if self.driver.find_elements(LocatorAvito.GEO[1], by="css selector"):
221221
geo = self.driver.find_element(LocatorAvito.GEO[1], by="css selector").text
222222
data["geo"] = geo.lower()
223223

@@ -244,7 +244,7 @@ def is_viewed(self, ads_id: int, price: int) -> bool:
244244
"""Проверяет, смотрели мы это или нет"""
245245
return self.db_handler.record_exists(ads_id, price)
246246

247-
def __save_data(self, data: dict):
247+
def __save_data(self, data: dict) -> None:
248248
"""Сохраняет результат в файл keyword*.xlsx"""
249249
self.xlsx_handler.append_data(data=data)
250250

requirements.txt

+1
Original file line numberDiff line numberDiff line change
@@ -4,3 +4,4 @@ notifiers==1.3.3
44
python-dotenv==1.0.1
55
requests==2.32.3
66
seleniumbase
7+
openpyxl

settings.ini

+14-10
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,19 @@
11
[Avito]
2-
url =
3-
chat_id =
4-
tg_token =
5-
num_ads = 2
2+
url = https://www.avito.ru/sankt-peterburg/tovary_dlya_kompyutera?cd=1&q=%%D0%%B2%%D0%%B8%%D0%%B4%%D0%%B5%%D0%%BE%%D0%%BA%%D0%%B0%%D1%%80%%D1%%82%%D0%%B0+rtx
3+
chat_id =
4+
tg_token =
5+
num_ads = 3
66
freq = 60
77
keys =
8-
max_price = 20000
8+
keys_blacks =
9+
max_price = 200000000
910
min_price = 0
10-
geo =
11-
proxy =
12-
proxy_change_ip =
13-
need_more_info = 0
14-
debug_mode = 0
11+
geo =
12+
proxy =
13+
proxy_change_ip =
14+
need_more_info = 1
15+
debug_mode = 1
16+
fast_speed = 0
17+
max_view =
18+
keys_black =
1519

xlsx_service.py

+1
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ def __new__(cls, file_name):
1717

1818
def _initialize(self, file_name):
1919
self.file_name = file_name
20+
os.makedirs("result", exist_ok=True)
2021
if not os.path.exists(self.file_name):
2122
self._create_file()
2223

0 commit comments

Comments
 (0)