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.
Requests
— Duke përdorur këtë bibliotekë, ne do të bëjmë një kërkesë GET në URL-në e synuar.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"