⚠️ Brak wsparcia: Ten Scraper, jaki i wtyczka do Matemaks powinny działać, ale autor już dzięki tym narzędziom zakończył swoją przygodę maturalną i ich nie aktualizuje (na studiach używa się e-trapez, ale jego dostaniecie w paczkach od starszych roczników :P)
Czyli prosty scraper do matemaks.pl z obsługą logowania do matemaks.pl i pobierania danych dostępnych tylko po zalogowaniu.
- Dokumentacja: https://selenium-python.readthedocs.io/index.html
- Instalacja:
pip install selenium==4.2.0
⚠️ Stara wersja Selenium: Jak widzisz Scraper działa ze starą wersją Selenium 4.2.0 (maj 2022), co może wiązać się z brakiem poprawek bezpieczeństwa. Sprawdź czy nie wykryto jakichś luk w zabezpieczeniach lub dostosuj kod do najnowszej wersji (nie powinno to być więcej niż kilka zmian).
Do działania Selenium potrzebny jest też sterownik. Obecna wersja tego scrapera obsługuje domyślnie przeglądarkę Google Chrome, dla której sterowniki znajdziesz tutaj.
Jeżeli chcesz odpalić scraper na Firefox, wystarczy w matemaks_scraper.py zamienić linię:
self.browser = webdriver.Chrome()
na
self.browser = webdriver.Firefox()
oczywiście musisz też mieć wtedy sterownik dla Firefox
# Importuje scraper
from matemaks_scraper import MatemaksScraper
# Importuje funcje pozwalające wyeksportować dane (opcjonalne)
from export_functions import *
# Tworzy nową instancję scrapera
scraper = MatemaksScraper()
# Jeżeli nie podano danych logowania do matemaks.pl w config.py
# to należy podać je podczas inicjalizacji klasy MatemaksScraper
scraper = MatemaksScraper("login", "haslo")
Korzystaj z metod udostępnionych w ramach tego scraper'a.
Dostępne metody:
- scraper.get_basic_matura_course()
- scraper.get_extended_matura_course()
- scraper.get_all_matura_course()
- scraper.get_all_matura_questions()
- scraper.get_lessons_data(url)
- scraper.get_questions(url)
- scraper.generate_data_for_matemaks_extension()
# Zamyka przeglądarkę
scraper.close_browser()
# Można też tak :)
del scraper
Korzystaj z funkcji pozwalających zapisać uzyskane dane lub utwórz swoje własne rozwiązania.
Dostępne funkcje eksportujące:
Dla łatwiejszego stosowania scraper'a można podać dane logowania do matemaks.pl w pliku config.py:
LOGIN = "[YOUR_LOGIN_TO_MATEMAKS_PL]"
PASSWORD = "[YOUR_PASSWORD_TO_MATEMAKS_PL]"
Zwraca słownik z wszystkimi pytaniami występującymi pod podanym adresem url
.
Domyślnie zwracane są dane w następującej strukturze:
"id": { // id pytania
"yt": string, // id flimu z odpowiedzią na youtube
"ans": string, // odpowiedź do pytania (pusty string, string, html lub MathJax)
"pts": string, // ilość punktów za pytanie
"data": string, // data
}
only_video_ids
== True spowoduje, że zwrócone dane będą wyglądać następująco:
// id pytania: id flimu z odpowiedzią na youtube
"id": "yt"
Zwraca słownik z informacjami o lekcjach występujących pod podanym adresem url
.
Domyślnie zwracane są dane w następującej strukturze:
{
"number of lesson": { // numer lekcji
"lvl": number, // poziom (1 dla matury podstawowej i 2 dla matury rozszerzonej),
"yt": string, // id flimu z lekcją na youtube,
"lesson_url": string, // url z ćwiczeniami do lekcji
"questions": { // obiekt z pytaniami do lekcji
"id": { // id pytania
"yt": string, // id flimu z odpowiedzią na youtube
"ans": string, // odpowiedź do pytania (pusty string, string, html lub MathJax)
"pts": string, // ilość punktów za pytanie
"data": string, // data
}
...
}
}
...
}
only_questions
== True spowoduje zwrócenie tylko pytań dla każdej lekcji:
{
"number of lesson": { // numer lekcji
"id": { // id pytania
"yt": string, // id flimu z odpowiedzią na youtube
"ans": string, // odpowiedź do pytania (pusty string, string, html lub MathJax)
"pts": string, // ilość punktów za pytanie
"data": string, // data
}
...
}
...
}
only_video_ids
== True spowoduje, że zwrócone dane będą wyglądać następująco:
{
"numer lekcji": "id flimu z lekcją na youtube"
...
}
Metoda pomocnicza, wywołuje get_lessons_data() z url strony zawierającej kurs maturalny na poziomie podstawowym.
Adres url tej strony jest zapisany w config.py w stałej BASIC_MATURA_COURSE_URL
.
Zwraca więc wszystkie informacje o lekcjach z kursu podstawowego. Metoda ta obsługuje flagi dostępne dla get_lessons_data() (czyli only_questions
i only_video_ids
).
Metoda pomocnicza, wywołuje get_lessons_data() z url strony zawierającej kurs maturalny na poziomie rozszerzonym.
Adres url tej strony jest zapisany w config.py w stałej EXTENDED_MATURA_COURSE_URL
.
Zwraca więc wszystkie informacje o lekcjach z kursu rozszerzonego. Metoda ta obsługuje flagi dostępne dla get_lessons_data() (czyli only_questions
i only_video_ids
).
Wywołuje get_basic_matura_course() oraz get_extended_matura_course()
Wygląda to w ten sposób:
return {
"basic_matura": get_basic_matura_course(**kwargs),
"extended_matura": get_extended_matura_course(**kwargs)
}
-
Pobiera wszytskie pytania z zestawmi pytań (url do zestawów pobiera z config.py ze stałej
QUESTIONS_COLLECTIONS_URLS
) -
Następnie pobiera wszystkie pytania występujące w lekcjach zarówno w kursie podstawowym, jak i rozszerzonym (wywołuje
get_all_matura_course(only_questions=True)
) -
Łączy pytania i zwraca w następującym układzie:
{ "id": { // id pytania "yt": string, // id flimu z odpowiedzią na youtube "ans": string, // odpowiedź do pytania (pusty string, string, html lub MathJax) "pts": string, // ilość punktów za pytanie "data": string, // data } ... }
Jeżeli zaś
only_video_ids
zostanie ustawione naTrue
, to dane będą zwracane w następujący sposób:{ "id": "yt" // id pytania: id flimu z odpowiedzią na youtube ... }
Zamyka przeglądarkę otwartą w czasie inicjalizacji klasy MatemaksScraper.
Generuje dane potrzebne dla wtyczki Matemaks Extension
Zapisuje data
do pliku .json w ścieżce podanej jako drugi argument (domyślnie plik generuje się do ścieżki podanej w config.py w stałej DEFAULT_OUTPUT_FILE_PATH
)