Saturday, June 18, 2005

BestJobs trick

Am scris un mic scriptuletz ce primeste la intrare o lista de cuvinte cheie ce sunt cautate pe BestJobs, returnand pentru fiecare cuvant din lista nr. de rezultate al cautarii.
Scriptul e urmatorul:

bestjobs.py
###########

#modul ce calculeaza nr. de locuri de munca de pe BestJobs,
#dupa o anumita lista de cuvinte cheie
import urllib
import string

def rezultate(lista_keywords = ['php', 'java', 'python']):
    #functia principala, primeste la intrare o lista de cuvinte cheie
    #dupa care se doreste a se face cautarea
    #lista_keywords e predefinita cu ['php', 'java', 'python']
    for keyword in lista_keywords:
        nr_rezultate = compute_result(keyword)
        print 'Rezultate dupa cautare %s : %d' %(keyword, nr_rezultate)

def compute_result(keyword):
    link = 'http://bestjobs.neogen.ro/?1=1&bj_nl_p=search_job_result&c_keywords=%s' %(keyword)
    pagina_rez = open_url(link)
    inc_rezultate = string.find(pagina_rez, ' Rezultate:') + len(' Rezultate:')
    sf_rezultate = string.find(pagina_rez, 'joburi', inc_rezultate)
    nr_rezultate = int(string.strip(pagina_rez[inc_rezultate:sf_rezultate]))
    return nr_rezultate

def open_url(url):
    text_pagina = ''
    try:
        file = urllib.urlopen(url)
        text_pagina = file.read()
        file.close()
    except IOError:
        print 'Nu am putut deschide ' + url

    return text_pagina

if __name__ == '__main__':
    rezultate()

E destul de "primitiv", l-am scris intr-o vineri spre sambata noapte, desi aveam alte lucruri mai importante de facut.
Totusi, daca facem

>>> import bestjobs
>>> from bestjobs import rezultate

si apoi

>>> rezultate()
Rezultate dupa cautare php : 135
Rezultate dupa cautare java : 229
Rezultate dupa cautare python : 4

Sunt un pic surprins ca Java a luat fata php-ului asa de mult (aproape dublu), ma bucur ca sunt macar 4 locuri de munca disponibile in python.
Mai ma joc un pic:

>>> rezultate(['j2ee', 'lisp', 'VB', 'zope'])
Rezultate dupa cautare j2ee : 54
Rezultate dupa cautare lisp : 0
Rezultate dupa cautare VB : 69
Rezultate dupa cautare zope : 0

Greu pentru cei ce cauta de lucru bazandu-se pe Lisp sau Zope, j2ee sta bine, VB (de la visual basic) sta mai prost decat ma asteptam.

>>> rezultate(['secretara', 'programator', 'sales%20manager'])
Rezultate dupa cautare secretara : 90
Rezultate dupa cautare programator : 188
Rezultate dupa cautare sales%20manager : 145

Pentru moment programatorii par a le fi luat "fata" sales managerilor, ma intreb pentru cat timp inca.

E tarziu in noapte, chiar am alte lucruri mai importante de facut, asa ca ma opresc aici cu joaca:) Oricine doreste poate imbunati codul de mai sus cum crede de cuviinta, numai sa ne anunte si pe noi ce rezultate a obtinut :)

4 Comments:

Blogger Cornel said...

#ce spui de asta?
# sint in stadiul de a invata python,
#insa cred ca expresiile regulate sint mult mai de ajutor
#in ceea ce priveste string-urile


def get_results(kwd = 'perl'):
html = open_url(kwd)
if len(html):
m = re.search('(\d+)\sjoburi', html)
print 'Rezultate pt [%s]: %s' % (kwd, m.groups()[0])
else:
print 'n-am primit date...'

def cauta(lista=['python', 'php', 'perl', 'java']):
for k in lista:
get_results(k)

if __name__ == '__main__':
cauta()

4:14 PM  
Blogger mihai turcu said...

E OK.
Problema e ca niciodata nu am avut curajul "sa ma apuc" sa invat cum trebuie expresiile regulate, vina mea:)
De altfel, numai folosind expresiile regulate pot trece la urmatorul pas al acestui "mini-proiect". De exemplu, daca vreau sa aflu in cate oferte de job-uri apare ca cerinta "C" sau "C++" si voi folosi scriptul acesta pentru a ma lamuri, nu voi face nici o scofala, caci search-ul celor de la Bestjobs imi intoarce toate ofertele de job-uri in care apare litera "c" (adica toate). Ideea ar fi sa se parseze toate paginile individuale ce prezinta oferte de job-uri, si in acestea sa caut referinte la limbajele "C" sau "C++" folosind expresiile regulate (e clar ca daca gasesc litera "C" la inceputul unui cuvant nu poate fi vorba despre limbajul "C").
Pentru lucrul cu string-urile in Python iti recomand "Text processing in Python", scrisa de D. Mertz (cu ocazia asta mi-o recomand si mie, din moment ce sta de mai mult de un an zile pe hard-ul meu si mereu am amanat sa ma apuc de ea), si lucrul fain e ca available for free, Text Processing in Python

12:43 AM  
Blogger Cornel said...

Merçi de răspuns.
Deocamdată nu string-urile mă interesează, ci mai degrabă lucrul cu bazele de date (şi tratarea excepţiilor). Ai idee de liste de discuţii/comunităţi despre python in .ro? Eu unul n-am găsit.. poate chiar nici nu există.

Spor

12:03 PM  
Blogger mihai turcu said...

Din pacate chiar nu exista nici o lista de discutii python in .ro, iar despre o comunitate formata nici atat. E pacat, caci sunt destui insi din tara asta care programeaza in Python, problema e cum facem sa "ne strangem" (fie chiar si virtual, cum e exemplul PHP Romania).

8:14 PM  

Post a Comment

<< Home