Indeed është një nga platformat më të mëdha të listimit të vendeve të punës në treg. Ata pretendojnë rreth 300 milion vizitorë në faqen e tyre të internetit në baza mujore. Si inxhinier i të dhënave, ju dëshironi të identifikoni se cila punë është në kërkesë të madhe. Epo, atëherë duhet të mbledhësh të dhëna nga faqet e internetit, si për të identifikuar dhe për të bërë një përfundim.

Në këtë artikull, ne do të gërvishtim Indeed duke përdorur Python 3.x. Ne do të heqim punë me piton nga vërtet në Nju Jork. Në fund të këtij tutoriali, ne do të kemi të gjitha punët që kanë nevojë për python si një aftësi në Nju Jork.

Pse me të vërtetë Scrape?

Scraping Indeed mund t'ju ndihmojë në shumë mënyra. Disa prej tyre janë:

  • Me kaq shumë të dhëna, ju mund të trajnoni një model të AI për të parashikuar pagat në të ardhmen për çdo aftësi të caktuar.
  • Kompanitë mund t'i përdorin këto të dhëna për të analizuar se çfarë pagash ofrojnë kompanitë e tyre rivale për një grup të caktuar aftësish. Kjo do t'i ndihmojë ata të përmirësojnë strategjinë e tyre të rekrutimit.
  • Ju gjithashtu mund të analizoni se cilat punë janë në kërkesë të lartë dhe çfarë lloj aftësish i nevojiten dikujt për t'u kualifikuar për punë në të ardhmen.

Vendosja e parakushteve

Do të na duhej Python 3.x për këtë projekt dhe faqja jonë e synuar do të jetë ky nga Indeed.

Unë supozoj se ju keni instaluar tashmë python në kompjuterin tuaj. Pra, le të ecim përpara me pjesën tjetër të instalimit.

Do të na duheshin dy biblioteka që do të na ndihmojnë të nxjerrim të dhëna. Ne do t'i instalojmë ato me ndihmën e pip.

  1. Requests — Duke përdorur këtë bibliotekë, ne do të bëjmë një kërkesë GET në URL-në e synuar.
  2. BeautifulSoup — Duke përdorur këtë bibliotekë, ne do të analizojmë HTML dhe do të nxjerrim të gjitha të dhënat thelbësore që na duhen nga faqja. Njihet gjithashtu si BS4.

Instalimi

pip install requests 
pip install beautifulsoup4

Ju mund të krijoni një dosje të dedikuar për të vërtetë në kompjuterin tuaj dhe më pas të krijoni një skedar python ku ne do të shkruajmë kodin.

Le të vendosim se çfarë do të gërvishtim

Sa herë që filloni një projekt skrapimi, është gjithmonë më mirë të vendosni paraprakisht se çfarë saktësisht duhet të nxjerrim nga faqja e synuar.

Ne do të gërvishtim të gjitha pjesët e theksuara në imazhin e mësipërm.

  • Emri i punës.
  • Emri i kompanisë
  • Vlerësimet e tyre.
  • Paga që ata ofrojnë
  • Detajet e punës.

Le të gërvishtemi në të vërtetë

Para se të shkruajmë rreshtin e parë të kodit, le të gjejmë vendndodhjen e saktë të elementit në DOM.

Çdo kuti pune është një list tag. Ju mund ta shihni këtë në imazhin e mësipërm. Dhe ka 18 prej tyre në çdo faqe dhe të gjitha bien nën etiketën div me klasën jobsearch-ResultsList. Pra, puna jonë e parë do të ishte të gjejmë këtë etiketë div.

Le të importojmë së pari të gjitha bibliotekat në skedar.

import requests
from bs4 import BeautifulSoup

Tani, le të deklarojmë URL-në e synuar dhe të bëjmë një lidhje HTTP me atë faqe interneti.

l=[]
o={}
target_url = "https://www.indeed.com/jobs?q=python&l=New+York%2C+NY&vjk=8bf2e735050604df"
head= {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/62.0.3202.94 Safari/537.36",
    "Accept-Encoding": "gzip, deflate, br",
    "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8",
    "Connection": "keep-alive",
    "Accept-Language": "en-US,en;q=0.9,lt;q=0.8,et;q=0.7,de;q=0.6",
}
resp = requests.get(target_url, headers=head)

Ne kemi deklaruar një listë boshe dhe një objekt bosh për të ruajtur të dhënat në fund.

Ndonjëherë (shumicën e kohës) mund të merrni një kod 403 status. Për të shmangur bllokimin, do t'ju duhet një "API për gërvishtjen e uebit".

Tani, le të gjejmë ul tag duke përdorur BS4.

soup = BeautifulSoup(resp.text, 'html.parser')

allData = soup.find("ul",{"class":"jobsearch-ResultsList css-0"})

Tani, ne duhet të përsërisim mbi secilën prej këtyre li tags dhe të nxjerrim të gjitha të dhënat një nga një duke përdorur një for loop.

alllitags = allData.find_all("div",{"class":"cardOutline"})

Tani, ne do të ekzekutojmë një for loop në këtë listë alllitags.

Siç mund ta shihni në imazhin e mësipërm se emri i punës është nën a tag. Pra, do ta gjejmë këtë a tag dhe më pas do ta nxjerrim tekstin prej tij duke përdorur metodën .text() të BS4.

for i in range(0,len(alllitags)):
    try:
        o["name-of-the-job"]=alllitags[i].find("a",{"class":"jcs-JobTitle css-jspxzf eu4oa1w0"}).text
    except:
        o["name-of-the-job"]=None

Le të gjejmë emrin e kompanisë me të njëjtën metodë.

Emri i kompanisë mund të gjendet nën etiketën div me klasën heading6 company_location tapItem-gutter companyInfo. Le ta nxjerrim edhe këtë.

try:
        o["name-of-the-company"]=alllitags[i].find("div",{"class":"companyInfo"}).find("span",{"class":"companyName"}).text
except:
        o["name-of-the-company"]=None

Këtu kemi gjetur fillimisht div tag dhe më pas kemi përdorur metodën .find() për të gjetur span tag brenda saj. Ju mund të kontrolloni imazhin e mësipërm për më shumë qartësi.

Le të nxjerrim vlerësimin tani.

Vlerësimi mund të gjendet nën të njëjtin div tag si emri i kompanisë. Vetëm klasa e etiketës span do të ndryshojë. Klasa e re do të jetë ratingsDisplay

try:
        o["rating"]=alllitags[i].find("div",{"class":"companyInfo"}).find("span",{"class":"ratingsDisplay"}).text
except:
        o["rating"]=None

Ofertën e pagave e gjeni nën etiketën div me klasën metadata salary-snippet-container.

try:
     o["salary"]=alllitags[i].find("div",{"class":"salary-snippet-container"}).text
except:
     o["salary"]=None

Gjëja e fundit që duhet të nxjerrim janë detajet e punës.

Kjo është një listë që mund të gjendet nën div tag me class metadata taxoAttributes-container.

try:
   o["job-details"]=alllitags[i].find("div",{"class":"metadata taxoAttributes-container"}).find("ul").text
except:
   o["job-details"]=None


l.append(o)
o={}

Në fund, ne e kemi shtyrë objektin tonë o brenda listës l dhe e kemi bërë objektin o bosh në mënyrë që kur qarku të funksionojë përsëri, ai të mund të ruajë të dhënat e punës së re.

Le ta printojmë dhe të shohim se cilat janë rezultatet.

print(l)

Kodi i plotë

Mund të bëni ndryshime të mëtejshme për të nxjerrë edhe detaje të tjera. Ju madje mund të ndryshoni URL-në e faqes për të fshirë punët nga faqet në vijim.

Por tani për tani, kodi i plotë do të duket kështu.

import requests
from bs4 import BeautifulSoup

l=[]
o={}


target_url = "https://www.indeed.com/jobs?q=python&l=New+York%2C+NY&vjk=8bf2e735050604df"
head= {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/62.0.3202.94 Safari/537.36",
    "Accept-Encoding": "gzip, deflate, br",
    "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8",
    "Connection": "keep-alive",
    "Accept-Language": "en-US,en;q=0.9,lt;q=0.8,et;q=0.7,de;q=0.6",
}

resp = requests.get(target_url, headers=head)
print(resp.status_code)
soup = BeautifulSoup(resp.text, 'html.parser')

allData = soup.find("ul",{"class":"jobsearch-ResultsList css-0"})

alllitags = allData.find_all("div",{"class":"cardOutline"})
print(len(alllitags))
for i in range(0,len(alllitags)):
    try:
        o["name-of-the-job"]=alllitags[i].find("a",{"class":"jcs-JobTitle css-jspxzf eu4oa1w0"}).text
    except:
        o["name-of-the-job"]=None

    try:
        o["name-of-the-company"]=alllitags[i].find("div",{"class":"companyInfo"}).find("span",{"class":"companyName"}).text
    except:
        o["name-of-the-company"]=None


    try:
        o["rating"]=alllitags[i].find("div",{"class":"companyInfo"}).find("span",{"class":"ratingsDisplay"}).text
    except:
        o["rating"]=None

    try:
        o["salary"]=alllitags[i].find("div",{"class":"salary-snippet-container"}).text
    except:
        o["salary"]=None

    try:
        o["job-details"]=alllitags[i].find("div",{"class":"metadata taxoAttributes-container"}).find("ul").text
    except:
        o["job-details"]=None

    l.append(o)
    o={}


print(l)

Përdorimi i Scrapingdog për gërvishtje në të vërtetë

Për të filluar përdorimin e saj, duhet të regjistroheni për llogarinë falas. Do të duhen vetëm 10 sekonda për të filluar me Scrapingdog.

Pasi të regjistroheni, do të ridrejtoheni në panelin tuaj. Paneli do të duket disi kështu.

Ju duhet të përdorni çelësin tuaj API.

Tani, mund të ngjisni lidhjen e faqes së vërtetë të synuar në të majtë dhe më pas të zgjidhni Perkthim JS si Jo. Pas kësaj, klikoni në Kopjo kodin nga e djathta. Tani përdorni këtë API në skriptin tuaj për të gërvishtur Indeed.

Do të vini re se kodi do të mbetet disi i njëjtë si më sipër. Ne vetëm duhet të ndryshojmë një gjë dhe kjo është URL-ja jonë e synuar.

import requests
from bs4 import BeautifulSoup

l=[]
o={}


target_url = "https://api.scrapingdog.com/scrape?api_key=xxxxxxxxxxxxxxxx&url=https://www.indeed.com/jobs?q=python&l=New+York%2C+NY&vjk=8bf2e735050604df&dynamic=false"


resp = requests.get(target_url)
print(resp.status_code)
soup = BeautifulSoup(resp.text, 'html.parser')

allData = soup.find("ul",{"class":"jobsearch-ResultsList css-0"})

alllitags = allData.find_all("div",{"class":"cardOutline"})
print(len(alllitags))
for i in range(0,len(alllitags)):
    try:
        o["name-of-the-job"]=alllitags[i].find("a",{"class":"jcs-JobTitle css-jspxzf eu4oa1w0"}).text
    except:
        o["name-of-the-job"]=None

    try:
        o["name-of-the-company"]=alllitags[i].find("div",{"class":"companyInfo"}).find("span",{"class":"companyName"}).text
    except:
        o["name-of-the-company"]=None


    try:
        o["rating"]=alllitags[i].find("div",{"class":"companyInfo"}).find("span",{"class":"ratingsDisplay"}).text
    except:
        o["rating"]=None

    try:
        o["salary"]=alllitags[i].find("div",{"class":"salary-snippet-container"}).text
    except:
        o["salary"]=None

    try:
        o["job-details"]=alllitags[i].find("div",{"class":"metadata taxoAttributes-container"}).find("ul").text
    except:
        o["job-details"]=None

    l.append(o)
    o={}


print(l)

Siç mund ta shihni, ne kemi zëvendësuar URL-në e synuar të Indeed me URL-në API të Scrapingdog. Duhet të përdorni çelësin tuaj API për të ekzekutuar me sukses këtë skript.

Me këtë skenar, ju do të jeni në gjendje të gërvishtni vërtet me një shpejtësi të shpejtë rrufe, gjithashtu pa u bllokuar.

konkluzioni

Në këtë tutorial, ne ishim në gjendje të pastronim postimet e punës në Indeed me Kërkesat dhe BS4. Sigurisht, mund ta modifikoni pak kodin për të nxjerrë edhe detaje të tjera.

Mund ta ndryshoni URL-në e faqes për të fshirë punët nga faqja tjetër. Natyrisht, ju duhet të gjeni ndryshimin që ndodh në URL sapo të ndryshoni faqen duke klikuar numrin nga fundi i faqes. Për të grumbulluar miliona postime të tilla, gjithmonë mund të përdorni Scrapingdog😜.

Shpresoj t'ju pëlqejë ky tutorial i vogël dhe nëse e pëlqeni, atëherë ju lutemi mos harroni ta ndani me miqtë tuaj dhe në rrjetet tuaja sociale.

Burime Shtesë

Këtu janë disa burime shtesë që mund t'ju duken të dobishme gjatë udhëtimit tuaj të gërvishtjes në internet:

  • "Sekser i skrapimit të uebit"
  • "Ueb Scraping vs API"
  • "Ueb scraping me Python (Një tutorial i plotë)"
  • "Tutorial i Supës së Bukur"