Wątek przeniesiony 2021-01-08 15:30 z Oceny i recenzje przez cerrato.

Potezny scraper ofert pracy

1

Pare miesięcy temu napisalem sporego scrapera do sciagania ofert pracy z najpopularniejszych polskich serwisow jak jji, nfj, linkedin itp. W sumie tak dzisiaj siedze i mysle, czy by nie zrobic z tego jakiejs web apki i nawet postawic na serwerze. Jest sporo stronek jak np ceneo, ktore wypluwa linki do produktu z wielu zrodel. Mozna zrobic cos na pierwowzor tylko ze z ofertami pracy. Apka django + vue + postgres + celery w tle do ciaglego wywolywania skryptu. Mialo by cos takiego sens ?

1

Wrzuć i sprawdź ;P

1

No pytanie czy to jest legalne i nie będziesz miał przerąbane przez to. Wrzuć jestem ciekaw ;]

0

Taki zbiorczy raport może robić teoretycznie Pani Stanisława, automatyzacja jest tu IMO od strony formalnej kwestią drugorzędną. Katalogujesz upublicznione w sieci zasoby - to chyba nie jest problem? Generujesz ruch na stronach źródłowych, co jest dla nich tylko na plus.

Jeśli nie przegniesz pały, to dla stron źródłowych to raczej korzystne narzędzie. Tylko w takim przypadku, mogliby Tobie wystawić legitne API, a nie, że zmienią nazwę atrybutu w JSON czy ID jakiegoś diva i się Tobie proces wywali :).

0

Udalo sie objesc infinity scrola na linkedinie i pracuj - ok 3/4s na scrap wszystkich ofert. JJ chyba zostanie na selenium, bo infiity jest mocno zakodowany :P

0

Udalo sie ujednolicic algorytm do 3 portali (pracuj, linkedin, noflufs) a justjoin niestety jest tak zakodowany, ze zostanie na selenium. Sredni czas wyuciagniecia wszystkiego (3 portale + oferty z warunkiem na justjoin) to ok 1.14min. Niestety to selenium spowalnia mocno, ale no trudno - do przezycia :D Czas teraz ladnie zesynchronizowac to z celery w czasie rzeczywistym co 10min i brac sie za Django :)

0
[2021-01-07 21:42:00,006: WARNING/MainProcess] Scrapping pracuj
[2021-01-07 21:42:00,962: WARNING/MainProcess] (1, 20, 1)
[2021-01-07 21:42:00,962: WARNING/MainProcess] (21, 40, 1)
[2021-01-07 21:42:00,964: WARNING/MainProcess] (41, 60, 1)
[2021-01-07 21:42:11,506: WARNING/MainProcess] Scrapping linkedin
[2021-01-07 21:42:11,506: WARNING/MainProcess] (25, 60, 25)
[2021-01-07 21:42:11,506: WARNING/MainProcess] (85, 120, 25)
[2021-01-07 21:42:11,507: WARNING/MainProcess] (145, 180, 25)
[2021-01-07 21:42:14,803: WARNING/MainProcess] Scrapping nfj
[2021-01-07 21:42:16,362: WARNING/MainProcess] (1, 33, 1)
[2021-01-07 21:42:16,362: WARNING/MainProcess] (34, 66, 1)
[2021-01-07 21:42:16,364: WARNING/MainProcess] (67, 99, 1)
[2021-01-07 21:43:02,989: INFO/MainProcess] Task scrap_jobs[d0935b61-1ad2-49cd-9c9a-2e8d3233555a] succeeded in 62.98500000000058s: None

Troche mnie tu nie bylo a projekt caly czas sie rozkreca ;P Django juz fajnie bangla z celery + celery beat ;] Zostalo zrobic gowniany front (hatfu) i moge umierac.

1

Przecież justjoin.it ma tego infinite scrolla zrobionego na podstawie kilkumegowego jsona:

https://justjoin.it/api/offers

a konkretne oferty:

https://justjoin.it/api/offers/diebold-nixdorf-senior-mulesoft-developer-next-gen

W czym problem?

1

Z racji, że działam "w tej branży" to wiem, że jest trochę takich agregatorów, jednak po czasem znikają. Jakiś czas temu udostępniałem nawet oferty dla https://zlapprace.pl - ale widzę, że obecnie z jakiegoś powodu już nie działa :)

1

Projekt juz praktycznie bangla :P Celery co 3 min trigeruje scrapera i elegancko wrzuca rekordy do postgresa. Glowny backend dziala praktycznie bez zarzutu. Zostalo dopisac jeszcze kilka funkcjonalnosci jak np. sortowanie po zarobkach itp. Ew front do poprawy - Jestem w tym siurakiem + nie cierpie :( Dobrze, ze z pomoca przychodzi bootstrap.

EdXjcsW.jpg ------------------------ SnjFbs1.jpg
0

No spoko, tylko nie wiem, czy taki projekt wniesie jakąś realną wartość. Chyba główna byłaby taka, że jak ktoś szuka pracy, to może wejść na jedną stronę zamiast na 3. No ale, gdybym szukał pracy, to i tak dla pewności sprawdziłbym 2 lub 3 konkretne serwisy zamiast jakiejś apki third-party, która mogła coś pominąć.

2

W sumie mozna rzec, ze projekt w 95% skonczony nie liczac oczywistych poprawek na froncie :P Nie chce mi sie spac, wiec podrecze Was troche swoimi wypocinami odnosnie samego celu, technologii itp.

Na poczatku marca ubieglego roku napisalem scrapera w Selenium (Na szybko, pod wplywem chwili) jako odzew na tracacych masowo prace ludzi z IT. Mimo ze sam scraper byl dziurawy to role swoja spelnial - Scrapowal 4 konkretne portale i na ich podstawie + slowa kluczowe uzytkownika, generowal raport xls ze wszystkimi danymi. Calosc trawal nie dluzej niz 30 sek. Swoja droga spotkalo sie z calkiem duzym zainteresowaniem na linkedinie, gdyz post dotarl do ponad 3k userow + co najciekawsze - Dwie osoby znalazly nowa prace na podstawie mojego raportu (O nich wiem). Dalo to ogromnego kopa motywacyjnego :)

Po pewnym czasie postanowilem wrocic do samego zamyslu, ale totalnie go przebudowac, zoptymalizowac i zrobic po prostu apke a nie wolnostojacego execa. Pomysl padl oczywiscie na django, gdyz jestem leniem i nieukiem i innych webowych bajerow nie znam :P Projekt sklada sie z dwoch rzeczy - Zwykla djangowska apka + oddzielny scraper.
Sama apka:

  • Django
  • Vue zaciagniete do django template (Okrojone bo okrojone, ale nadal najwazniejsze funkcjonalnosci dzialaja - Zalezalo mi na vueowskich EL :D)
  • Bootstrapy
  • Celery
    -Postgres

Scraper:

  • requests -> Do wyciagania api tam gdzie bylo mozna
  • requests-html -> tam gdzie nie znalazlem api i musialem recznie orac strone
  • asyncio -> Wrapper na requests-html do jednoczesnego scrapowania z wielu page'y. Obecnie jest ustawione na 5 iteracji tzn 60 / 5 kazdy watek ma do przeorania kolejnych 12 stron.
    -sqlite -> Wolnostajaca mala db trzymajaca z poczatku wszystkie wyplute wyniki a przy kolejnym runie czyszczaca sie do pierwszego zescrapowanego elementu (po min(id)) i w momencie natkniecia sie na ten element, stopowanie dalszego scrapu na tej stronie. Znacznie przyspieszylo mi szybkosc scrapu.

Calosc jest sklejona poprzez celery, ktore ma ustawionego periodic taska odpalajacego sie asynchronicznie co 3min -> scrap +/- 15 sec wypluwajacy liste z ok 10k elementami typu tuple -> (link, pozycja, miasto) -> dodanie do nowych rekordow do postgresa.

Wszystko fajnie bangla i jest dosyc szybkie :P Przy kazdym projekcie ktorego podejmuje sie prywatnie, staram sie czegos nauczyc. Tutaj byl zdecydowanie nacisk na Celery oraz przypomnienie sobie ciekawostek z sql'a :P O froncie nie wspominam, bo to byla najwieksza katorga.. Mimo to chcialbym sie kiedys w nim poprawic. Ponizej kilka fotek jak to sie prezentuje. Ubogo bo ubogo, ale nadal responsywnie. Nawet jak na takie backendowe zwierze jak ja :P

6K1O1kR.jpg H80Cnnd.jpg ZAp2I4n.jpg P7Edeiw.jpg
0

Można, można też postawić botneta i kopać krypto. Ostatecznie i tak liczy się w końcu wartość dodana, no nie?

1

Jednym z ficzerów które możesz rozważyć jest pokazanie historycznych stawek w danych firmach. Nie kojarzę żeby job boardy coś takiego pokazywały (pewnie klienci nie chcą). Jeśli zapisujesz dane historyczne to powinno to być stosunkowo proste. Notyfikacje jak pojawi się oferta spełniająca jakieśtam kryteria też byłyby fajne (aczkolwiek trzeba do tego rozbudować filtry). Podobnie filtr który wywala oferty od pośredników i kontraktorni.

1 użytkowników online, w tym zalogowanych: 0, gości: 1