Web Scraping voor vacatures is een alternatieve snelkoppeling voor werkzoekenden om een database van actuele vacatures aan te leggen. Randstad zegt dat de gemiddelde zoektocht naar een baan vijf tot zes maanden kan duren, vanaf het moment dat er wordt gesolliciteerd tot het moment dat een functie wordt ingevuld. Wat als je een oplossing hebt die de last van het surfen door alle vacatureportalen en het kiezen van de juiste die bij je past kan verminderen?
Dit artikel zal u meenemen op een reis waarin wordt uitgelegd hoe u web scraping kunt doen voor vacatures. Dus, je bent op de arbeidsmarkt en probeert de beste baan te vinden. Maar je wilt het slimmer spelen en niet harder. Waarom bouwt u geen web scraper om vacatures voor u te verzamelen en te parsen. Zodra u het instelt, zal het u voorzien van gegevensrijkdom in een mooi opgeruimd formaat, zodat u het niet steeds opnieuw handmatig hoeft te controleren. Laten we aan de slag gaan.
Web scraping voor vacatures is de oplossing die automatisch gegevens van meerdere vacatureportalen verzamelt en uw tijd vermindert bij het ophalen van gegevens van elke website. Met een dergelijke tool die u een volledige database van vacatures kan bieden, wordt uw taak veel eenvoudiger. Het enige wat u hoeft te doen is filteren welke u past en doorgaan met het sollicitatieproces.
Dus, je bent op de arbeidsmarkt en probeert de beste baan te vinden. Maar u wilt het slimmer spelen en niet harder. Waarom bouwt u geen web scraper die vacatures voor u verzamelt en parseert? Als je het eenmaal hebt ingesteld, zal het je voorzien van gegevensrijkdom in een mooi opgeruimd formaat, zodat je het niet steeds opnieuw handmatig hoeft te controleren. Laten we aan de slag gaan.
[Disclaimer! Veel websites kunnen het scrapen van gegevens van hun pagina's beperken. Gebruikers kunnen worden onderworpen aan juridische problemen, afhankelijk van waar en hoe ze proberen de informatie eruit te halen. Men moet dus uiterst voorzichtig zijn bij het bekijken van sites die hun gegevens opslaan. Facebook, Linked In en Craiglist zijn bijvoorbeeld soms boos als gegevens van hun pagina's worden gescrapt. Dus als u wilt scrapen, doe dat dan op eigen risico].
Dit zal een zeer eenvoudig artikel zijn waarin we de basis van web scraping zullen zien door wat nuttige informatie over banen gerelateerd aan "Data Science" uit indeed.com te halen. We zullen een geweldig programma schrijven dat de vacatures meerdere keren handmatig bijwerkt. Enkele nuttige bibliotheken die erg handig zullen zijn tijdens het bouwen van deze scraper zijn "requests" en "BeautifulSoup."
Laten we eerst eens kijken naar de voorbeeldpagina die we er inderdaad uit gaan halen.
De manier waarop de URL is gestructureerd is belangrijk:
Deze URL-structuur zou ons enorm helpen bij het verder bouwen van de scraper en het verzamelen van gegevens van meerdere pagina's.
Chrome kan de HTML-structuur van de pagina onderzoeken door er met de rechtermuisknop op te klikken en de optie inspect element te gebruiken. Rechts verschijnt dan een menu, en dat toont ook de geneste elemententags, en als u uw cursor op die elementen zet, wordt dat gedeelte gemarkeerd.
Voor dit artikel veronderstel ik dat je de basis van HTML kent, zoals tags, divs, enz., maar gelukkig hoef je niet alles te weten. Je hoeft alleen maar de paginastructuur en de hiërarchie van de verschillende onderdelen te begrijpen.
Nu hebben we de paginastructuur geanalyseerd. Dit zal ons helpen code te bouwen volgens die informatie om de gegevens van onze keuze eruit te halen. Laten we beginnen met het importeren van onze bibliotheken. Merk op dat we hier ook "tijd" importeren, wat nuttig zal zijn om de server van de site niet te overstelpen bij het schrapen van informatie.
import verzoeken
import bs4
van bs4 importeert BeautifulSoup
importeer pandas als pd
import tijd
We zullen ons eerst richten op de enkele pagina om elk stukje informatie dat we willen in te trekken,
URL = "https://www.indeed.com/jobs?q=data+scientist+%2420%2C000&l=New+York&start=10"
#een aanvraag doen van de bovenstaande URL
page = requests.get(URL)
#het gewenste formaat van "page" specificeren met de html-parser - hierdoor kan python de verschillende onderdelen van de pagina lezen, in plaats van deze te behandelen als één lange string.
soep = BeautifulSoup(page.text, "html.parser")
#print soep in een meer gestructureerde boomstructuur die het lezen vergemakkelijkt
print(soup.prettify())
Het gebruik van prettify maakt het gemakkelijker om een overzicht te hebben van de HTML-codering van een pagina en levert output als deze,
Nu staat alle informatie over onze interessante pagina in onze variabele "soep". We moeten verder graven in de code om de verschillende tags en sub-tags te doorlopen om de vereiste informatie vast te leggen.
Vijf belangrijke punten voor elke vacature zijn,
Als we de pagina bekijken, zijn er 15 vacatures. Daarom zou onze code ook 15 verschillende items moeten genereren. Als de code er echter minder oplevert, kunnen we teruggaan naar de pagina en zien wat er niet wordt vastgelegd.
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.
Samengevat omvat de functie die we gaan zien de volgende drie stappen,
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)
Deze code zal een output als deze opleveren,
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”.
We zullen if/else-statements gebruiken om de bedrijfsinformatie uit elk van deze plaatsen te halen. Om de witruimtes rond de bedrijfsnamen te verwijderen wanneer ze worden uitgevoerd, gebruiken we aan het eind inputting.strip().
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)
Het salaris is het moeilijkste deel om uit vacatures te halen. De meeste vacatures publiceren helemaal geen salarisinformatie, terwijl andere die dat wel doen, op meerdere plaatsen te vinden zijn. We moeten dus een code schrijven die meerdere salarissen van verschillende plaatsen kan ophalen, en als er geen salaris wordt gevonden, moeten we een plaatshouder "Niets gevonden" creëren voor alle vacatures die geen salaris bevatten.
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)
De laatste taak is het verkrijgen van de vacature-samenvatting. Het is echter niet mogelijk om de vacature-samenvattingen voor elke specifieke vacature te krijgen, omdat ze niet zijn opgenomen in de HTML van een bepaalde Indeed-pagina. We kunnen wat informatie over elke vacature krijgen van wat er wordt aangeboden. Hiervoor kunnen we Selenium gebruiken.
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.
Er zijn genoeg vacatureportalen die u op de hoogte kunnen brengen van de vacatures die bij uw profiel passen. Toch zal een job scraping oplossing je een volledige lijst van jobs en de beschrijving ervan bezorgen als een handige database. Zo krijg je een beter zicht op alle vacatures op één plaats.
Web scraping heeft meestal bepaalde uitdagingen zoals IP-blokkades, geo-blokkades en beperkte snelheid. Het scrapen van jobs van job portals zal ook dergelijke uitdagingen hebben. Om al deze problemen te omzeilen, kan proxy adressen u helpen met IP-adressen van de gewenste locatie en zorgen voor anonimiteit.
Requests, BeautifulSoup en Pandas zijn vrij gebruikelijke python-bibliotheken om werkgerelateerde gegevens van websites te scrapen. Request bibliotheek is de meest gebruikte python bibliotheek om webverzoeken te versturen, terwijl BeautifulSoup verantwoordelijk is voor het parsen van gegevens, en Pandas bibliotheek zal helpen met de gegevensstructuur operaties.
Gerelateerde artikelen
Hoe Twitter te scrapen met Python
Hoe Instagram te scrapen met Python
Hoe Reddit te schrapen met Python
In dit artikel hebben we gezien wat web scraping is en hoe het nuttig kan zijn in ons dagelijks leven aan de hand van een praktisch voorbeeld van het schrapen van vacaturegegevens van webpagina's van Indeed. Houd er rekening mee dat de resultaten die u krijgt anders kunnen zijn dan deze, omdat de pagina's dynamisch zijn, dus de informatie verandert met de tijd.
Web Scraping is een ongelooflijke techniek, mits goed uitgevoerd en volgens uw eisen. We hebben verder de belangrijke vijf aspecten van elke vacature gezien en hoe je die eruit kunt halen. Als u deze code zelf uitprobeert, hebt u gegevens van vacatures geschraapt en hoeft u niet handmatig naar de vacatures te zoeken, wat geweldig is. Dezelfde techniek kan ook worden toegepast op andere webpagina's, maar hun structuur kan verschillen. Daarom moet je je code daarop afstemmen. Maar alle basisprincipes zijn in dit artikel behandeld, dus er zou geen enkel probleem zijn om ook andere pagina's te schrapen.
Als u op zoek bent naar proxy diensten, vergeet dan niet te kijken naar ProxyScrape residentiële en premium proxies.