├── src ├── accounts │ ├── __init__.py │ ├── migrations │ │ ├── __init__.py │ │ └── 0001_initial.py │ ├── tests.py │ ├── apps.py │ ├── templates │ │ └── accounts │ │ │ ├── register_done.html │ │ │ ├── login.html │ │ │ ├── register.html │ │ │ └── update.html │ ├── urls.py │ ├── models.py │ ├── forms.py │ ├── admin.py │ └── views.py ├── scraping_service │ ├── __init__.py │ ├── settings │ │ ├── __init__.py │ │ └── production.py │ ├── views.py │ ├── asgi.py │ ├── wsgi.py │ └── urls.py ├── scraping │ ├── migrations │ │ ├── __init__.py │ │ ├── 0002_error.py │ │ ├── 0003_url.py │ │ └── 0001_initial.py │ ├── __init__.py │ ├── tests.py │ ├── apps.py │ ├── admin.py │ ├── templates │ │ └── scraping │ │ │ ├── delete.html │ │ │ ├── detail.html │ │ │ ├── create.html │ │ │ ├── home.html │ │ │ └── list.html │ ├── utils.py │ ├── forms.py │ ├── models.py │ ├── views.py │ └── parsers.py ├── Procfile ├── static │ ├── favicon.ico │ ├── fonts │ │ └── WendyOne-Regular.ttf │ └── css │ │ └── main.css ├── templates │ ├── 403.html │ ├── 500.html │ ├── 400.html │ ├── 404.html │ └── base.html ├── requirements.txt ├── manage.py ├── Django_templates_tags.txt ├── mydata.json ├── run_scraping.py ├── send_emails.py └── .gitignore └── README.md /src/accounts/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/scraping_service/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/accounts/migrations/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/scraping/migrations/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/Procfile: -------------------------------------------------------------------------------- 1 | web: gunicorn scraping_service.wsgi --log-file – -------------------------------------------------------------------------------- /src/scraping/__init__.py: -------------------------------------------------------------------------------- 1 | default_app_config = 'scraping.apps.ScrapingConfig' 2 | -------------------------------------------------------------------------------- /src/accounts/tests.py: -------------------------------------------------------------------------------- 1 | from django.test import TestCase 2 | 3 | # Create your tests here. 4 | -------------------------------------------------------------------------------- /src/scraping/tests.py: -------------------------------------------------------------------------------- 1 | from django.test import TestCase 2 | 3 | # Create your tests here. 4 | -------------------------------------------------------------------------------- /src/static/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/olegJF/scraping_service/HEAD/src/static/favicon.ico -------------------------------------------------------------------------------- /src/accounts/apps.py: -------------------------------------------------------------------------------- 1 | from django.apps import AppConfig 2 | 3 | 4 | class AccountsConfig(AppConfig): 5 | name = 'accounts' 6 | -------------------------------------------------------------------------------- /src/static/fonts/WendyOne-Regular.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/olegJF/scraping_service/HEAD/src/static/fonts/WendyOne-Regular.ttf -------------------------------------------------------------------------------- /src/scraping_service/settings/__init__.py: -------------------------------------------------------------------------------- 1 | from .production import * 2 | try: 3 | from .local_settings import * 4 | except ImportError: 5 | pass 6 | -------------------------------------------------------------------------------- /src/scraping/apps.py: -------------------------------------------------------------------------------- 1 | from django.apps import AppConfig 2 | 3 | 4 | class ScrapingConfig(AppConfig): 5 | name = 'scraping' 6 | verbose_name = 'Приложение по сбору вакансий' 7 | -------------------------------------------------------------------------------- /src/static/css/main.css: -------------------------------------------------------------------------------- 1 | @font-face { 2 | font-family: WendyOne; 3 | src: url(../fonts/WendyOne-Regular.ttf); 4 | } 5 | #brand { 6 | font-family: WendyOne; 7 | color: #FFF; 8 | } 9 | -------------------------------------------------------------------------------- /src/scraping/admin.py: -------------------------------------------------------------------------------- 1 | from django.contrib import admin 2 | from .models import City, Language, Vacancy, Error, Url 3 | 4 | admin.site.register(City) 5 | admin.site.register(Language) 6 | admin.site.register(Vacancy) 7 | admin.site.register(Error) 8 | admin.site.register(Url) 9 | -------------------------------------------------------------------------------- /src/scraping_service/views.py: -------------------------------------------------------------------------------- 1 | from django.shortcuts import render 2 | import datetime 3 | 4 | 5 | def home(request): 6 | date = datetime.datetime.now().date() 7 | name = 'Dave' 8 | _context = {'date': date, 'name': name} 9 | return render(request, 'home.html', _context) 10 | -------------------------------------------------------------------------------- /src/templates/403.html: -------------------------------------------------------------------------------- 1 | {% extends "base.html" %} 2 | 3 | {% block title %} 403 {% endblock %} 4 | 5 | {% block content %} 6 | 7 |
Вы зарегистрировались в системе. 11 | Теперь Вы можете войти. 12 |
13 | 14 |{{ object.description }}
11 |{{ object.company }}
12 |{{object.city.name }} | {{object.language.name }} | 13 | {{object.timestamp|date:"d-m-Y" }}
14 | 15 |11 |
15 | 16 |13 | Каждый день мы анализируем сайты с вакансиями, согласно настроек наших подпсчиков. 14 | Все подходящие вакансии, которые были опубликованы на этих сайтах за последние сутки, 15 | записываются в базу данных и рассылаюстя подписчикам, согласно их предпочтений. 16 | Вы можете просмартивать актуальные вакансии, просто выбрав необходимый город или специальность. 17 | Или же, пройдя несложную регистрацию, 18 | получать каждый день письмо со списком новых вакансий за последние сутки, согласно Ваших потребностей. 19 |
20 | 26 |Если Вы не нашли подходящий набор Город, Специальность, 25 | Вы можете заполнить форму ниже с Вашими пожеланиями. После того, 26 | как необходимые данные будут добавлены, Вы получите письмо на указанный Вам и-мэйл.
27 |28 | 34 |
35 |{{ obj.description }}
17 |{{ obj.company }}
18 |{{obj.city.name }} | {{obj.language.name }} | 19 | {{obj.timestamp|date:"d-m-Y" }}
20 | 21 |{row["description"]}
' 49 | html += f'{row["company"]}
Город: {i["city"]}, Специальность:{i["language"]}, Имейл:{i["email"]}
Для города: {keys[0]} и ЯП: {keys[1]} отсутствуют урлы