İş ilanları için Web Kazıma, iş arayanların mevcut iş ilanlarından bir veritabanı oluşturmaları için alternatif bir kısayoldur. Randstad, ortalama bir iş arama sürecinin, başvurunun yapıldığı andan pozisyonun doldurulduğu ana kadar beş ila altı ay sürebileceğini söylüyor. Peki ya tüm iş portalları arasında gezinme ve size uygun olanı seçme yükünüzü azaltabilecek bir çözümünüz olsaydı?
Bu makale sizi iş ilanları için web kazıma işleminin nasıl yapılacağını açıklayan bir yolculuğa çıkaracak. Yani, iş piyasasındasınız ve en iyi işi bulmaya çalışıyorsunuz. Ama daha akıllıca oynamak istiyorsunuz, daha sert değil. Neden sizin için iş ilanlarını toplayacak ve ayrıştıracak bir web kazıyıcı oluşturmuyorsunuz? Bir kez ayarladığınızda, size güzel ve düzenli bir formatta veri zenginlikleri sağlayacaktır, böylece tekrar tekrar manuel olarak kontrol etmek zorunda kalmazsınız. Hadi başlayalım.
İş ilanları için web kazıma, birden fazla iş portalından otomatik olarak veri toplayan ve her bir web sitesinden veri alma sürenizi azaltan bir çözümdür. Size iş ilanlarının eksiksiz bir veritabanını sağlayabilecek böyle bir araca sahip olmak, görevinizi birden fazla kat basitleştirecektir. Tek yapmanız gereken size uygun olanları filtrelemek ve başvuru sürecine devam etmektir.
Yani, iş piyasasındasınız ve en iyi işi bulmaya çalışıyorsunuz. Ama daha zor değil, daha akıllıca oynamak istiyorsunuz. Neden sizin için iş ilanlarını toplayacak ve ayrıştıracak bir web kazıyıcı oluşturmuyorsunuz? Bir kez ayarladığınızda, size güzel ve düzenli bir formatta veri zenginlikleri sağlayacaktır, böylece tekrar tekrar manuel olarak kontrol etmek zorunda kalmazsınız. Hadi başlayalım.
[Yasal Uyarı! Birçok web sitesi, sayfalarından veri alınmasını kısıtlayabilir. Kullanıcılar, bilgileri nereden ve nasıl almaya çalıştıklarına bağlı olarak yasal sorunlara maruz kalabilirler. Bu nedenle, verilerini barındıran sitelere bakarken son derece dikkatli olmak gerekir. Örneğin, Facebook, Linked In ve Craiglist bazen sayfalarından veri alınmasına karşı çıkmaktadır. Bu yüzden eğer kazımak istiyorsanız, riski kendinize ait olmak üzere kazıyın].
Bu, indeed.com'dan "Veri Bilimi" ile ilgili işlerle ilgili bazı yararlı bilgileri çıkararak web kazımanın temellerini göreceğimiz çok basit bir makale olacak. İşleri birden çok kez manuel olarak güncelleyen harika bir program yazacağız. Bu kazıyıcıyı oluştururken çok kullanışlı olacak bazı yararlı kütüphaneler "requests" ve "BeautifulSoup "tur.
Öncelikle, gerçekten çıkaracağımız örnek sayfaya bir göz atalım.
URL'nin yapılandırılma şekli önemlidir:
Bu URL yapısı, kazıyıcıyı oluşturmaya ve birden fazla sayfadan veri toplamaya devam ederken çok yardımcı olacaktır.
Chrome, sayfaya sağ tıklayıp inspect element seçeneğini kullanarak sayfanın HTML yapısını inceleyebilir. Sağ tarafta bir menü belirecek ve iç içe geçmiş öğe etiketlerini de gösterecek ve imlecinizi bu öğelerin üzerine getirdiğinizde ekranın o bölümünü vurgulayacaktır.
Bu makale için HTML hakkında etiketler, divler vb. gibi temel bilgileri bildiğinizi varsayıyorum, ancak neyse ki her şeyi bilmenize gerek yok. Sadece sayfa yapısını ve farklı bileşenlerin hiyerarşisini anlamanız gerekiyor.
Şimdi sayfa yapısını analiz ettik. Bu, seçtiğimiz verileri çekmek için bu bilgilere göre kod oluşturmamıza yardımcı olacaktır. İlk olarak kütüphanelerimizi içe aktararak başlayalım. Burada "zaman "ı da içe aktardığımıza dikkat edin; bu, bilgileri kazırken sitenin sunucusunu bunaltmamak için yardımcı olacaktır.
i̇thalat talepleri̇
bs4'ü içe aktar
from bs4 import BeautifulSoup
import pandas as pd
İçe aktarma süresi
İstediğimiz her bir bilgiyi geri çekmek için önce tek bir sayfayı hedefleyeceğiz,
URL = "https://www.indeed.com/jobs?q=data+scientist+%2420%2C000&l=New+York&start=10"
#yukarıda belirtilen URL için bir istek gerçekleştiriliyor:
sayfa = requests.get(URL)
#html ayrıştırıcısını kullanarak istenen "sayfa" biçimini belirtmek - bu, python'un sayfayı tek bir uzun dize olarak ele almak yerine sayfanın çeşitli bileşenlerini okumasına olanak tanır.
soup = BeautifulSoup(page.text, "html.parser")
#çorbayı daha kolay okunmasını sağlayan daha yapılandırılmış bir ağaç biçiminde yazdırma
print(soup.prettify())
Prettify kullanımı, sayfanın HTML kodlamasına genel bir bakış elde etmeyi kolaylaştırır ve aşağıdaki gibi bir çıktı sağlar,
Artık ilgilendiğimiz sayfadaki tüm bilgiler "soup" değişkenimizde bulunmaktadır. Gerekli bilgileri yakalamak için çeşitli etiketler ve alt etiketler arasında yineleme yapmak üzere kodu daha fazla incelememiz gerekiyor.
Her iş ilanı için beş temel nokta vardır,
Sayfaya baktığımızda 15 adet iş ilanı olduğunu görüyoruz. Bu nedenle kodumuz da 15 farklı öğe üretmelidir. Ancak, kod bundan daha azını sağlarsa, sayfaya geri dönebilir ve neyin yakalanmadığını görebiliriz.
As can be seen, the entirety of each job posting is under <div> tags, with an attribute “class” = “row result.”
Further, we could also see that job titles are under <a> tags, with the attribute “title = (title)”. One can see the value of the tag’s attribute with tag[“attribute”], so I can use it to find each posting’s job title.
Özetleyecek olursak, göreceğimiz işlev aşağıdaki üç adımı içermektedir,
def extract_job_title_from_result(soup):
jobs = []
for div in soup.find_all(name="div", attrs={"class":"row"}):
for a in div.find_all(name="a", attrs={"data-tn-element":"jobTitle"}):
jobs.append(a["title"])
return(jobs)
extract_job_title_from_result(soup)
Bu kod aşağıdaki gibi bir çıktı verecektir,
Getting company names can be a bit tricky because most of them are appearing in <span> tags, with “class”:” company”. They are also housed in <span> tags with “class”:” result-link-source”.
Bu yerlerin her birinden şirket bilgilerini çıkarmak için if/else deyimlerini kullanacağız. Çıktı alınırken şirket adlarının etrafındaki beyaz boşlukları kaldırmak için, sonunda inputting.strip() kullanacağız.
def extract_company_from_result(soup):
companies = []
for div in soup.find_all(name="div", attrs={"class":"row"}):
company = div.find_all(name="span", attrs={"class":"company"})
if len(company) > 0:
for b in company:
companies.append(b.text.strip())
else:
sec_try = div.find_all(name="span", attrs={"class":"result-link-source"})
for span in sec_try:
companies.append(span.text.strip())
return(companies)
extract_company_from_result(soup)
Locations are located under the <span> tags. Span tags are sometimes nested within each other, such that the location text may sometimes be within “class”:”location” attributes, or nested in “itemprop”:”addressLocality”. However a simple for loop can examine all span tags for text and retrieve the necessary information.
def extract_location_from_result(soup):
locations = []
spans = soup.findAll('span', attrs={'class': 'location'})
for span in spans:
locations.append(span.text)
return(locations)
extract_location_from_result(soup)
Maaş, iş ilanlarından çıkarılması en zor kısımdır. Çoğu ilan maaş bilgisini hiç yayınlamazken, yayınlayanlarda ise bunu almak için birden fazla yer olabilir. Bu nedenle, birden fazla yerden birden fazla maaş alabilen bir kod yazmamız ve maaş bulunamazsa, maaş içermeyen tüm işler için bir yer tutucu "Hiçbir Şey Bulunamadı" değeri oluşturmamız gerekir.
Some salaries are under <nobr> tags, while others are under <div> tags, “class”:”sjcl” and are under separate div tags with no attributes. Try/except statement can be helpful while extracting this information.
def extract_salary_from_result(soup):
salaries = []
for div in soup.find_all(name="div", attrs={"class":"row"}):
try:
salaries.append(div.find('nobr').text)
except:
try:
div_two = div.find(name="div", attrs={"class":"sjcl"})
div_three = div_two.find("div")
salaries.append(div_three.text.strip())
except:
salaries.append("Nothing_found")
return(salaries)
extract_salary_from_result(soup)
Son iş, iş özetini almaktır. Ancak, her bir pozisyon için iş özetlerini almak mümkün değildir, çünkü bunlar belirli bir Indeed sayfasından HTML'ye dahil edilmemiştir. Sağlananlardan her iş hakkında bazı bilgiler alabiliriz. Bunun için Selenium'u kullanabiliriz.
But let’s first try this using python. Summaries are located under <span> tags. Span tags are nested within each other such that the location text is within “class”:” location” tags or nested in “itemprop”:” adressLocality”. However, using a simple for loop can examine all span tags for text to retrieve the necessary information.
Profilinizle eşleşen işleri size bildirebilecek yeterli sayıda iş portalı vardır. Yine de, bir iş kazıma çözümüne sahip olmak size işlerin tam bir listesini ve açıklamasını kullanışlı bir veritabanı olarak sağlayacaktır. Bu, tüm iş fırsatlarını tek bir yerde daha iyi görmenizi sağlayacaktır.
Web kazıma genellikle IP blokları, coğrafi bloklar ve sınırlı hız gibi belirli zorluklara sahip olacaktır. İş portallarından iş kazımak da bu tür zorluklara sahip olacaktır. Tüm bu sorunları aşmak için, proxy adresleri gerekli konumun IP adresleri konusunda size yardımcı olabilir ve anonimlik sağlayabilir
Requests, BeautifulSoup ve Pandas, web sitelerinden işle ilgili verileri kazımak için oldukça yaygın python kütüphaneleridir. Request kütüphanesi web istekleri göndermek için kullanılan en yaygın python kütüphanesi iken, BeautifulSoup verileri ayrıştırmaktan sorumludur ve Pandas kütüphanesi veri yapısı işlemlerine yardımcı olacaktır.
İlgili Makaleler
Python Kullanarak Twitter Nasıl Kazınır?
Python Kullanarak Instagram Nasıl Kazınır
Python Kullanarak Reddit Nasıl Kazınır
Bu makalede, web kazımanın ne olduğunu ve Indeed'in web sayfalarından iş verilerini kazımanın pratik bir örneğini alarak günlük hayatımızda nasıl yardımcı olabileceğini gördük. Sayfalar dinamik olduğu için elde ettiğiniz sonuçların bunlardan farklı olabileceğini lütfen unutmayın, bu nedenle bilgiler zamanla değişmeye devam eder.
Web Kazıma, doğru şekilde ve gereksinimlerinize göre yapılırsa inanılmaz bir tekniktir. Her iş ilanının önemli beş yönünü ve bunların nasıl çıkarılacağını daha önce gördük. Bu kodu kendi başınıza denediğinizde, iş ilanlarının verilerini kazıyacaksınız ve işleri manuel olarak aramanıza gerek kalmayacak, ki bu harika bir şey. Aynı teknik diğer web sayfalarına da uygulanabilir, ancak yapıları farklı olabilir. Bu nedenle kişinin kodunu buna göre optimize etmesi gerekir. Ancak tüm temel bilgiler bu makalede ele alınmıştır, bu nedenle diğer sayfaları da kazımakta herhangi bir zorluk yaşanmayacaktır.
Proxy hizmetleri arıyorsanız, şu adrese bakmayı unutmayın ProxyScrape konut ve prim vekilleri.