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 :)
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:
#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()
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
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
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).
Post a Comment
<< Home