suchen
HeimBackend-EntwicklungPython-TutorialSo erstellen Sie mit Crawlee einen LinkedIn-Job-Scraper in Python

Einführung

In diesem Artikel erstellen wir eine Webanwendung, die LinkedIn mit Crawlee und Streamlit nach Stellenausschreibungen durchsucht.

Wir werden mit Crawlee für Python einen LinkedIn-Job-Scraper in Python erstellen, um den Firmennamen, die Berufsbezeichnung, den Zeitpunkt der Veröffentlichung und den Link zur Stellenausschreibung aus dynamisch empfangenen Benutzereingaben über die Webanwendung zu extrahieren.

Hinweis
Eines unserer Community-Mitglieder hat diesen Blog als Beitrag zum Crawlee Blog geschrieben. Wenn Sie solche Blogs zum Crawlee-Blog beitragen möchten, kontaktieren Sie uns bitte auf unserem Discord-Kanal.

Am Ende dieses Tutorials verfügen Sie über eine voll funktionsfähige Webanwendung, mit der Sie Stellenausschreibungen von LinkedIn extrahieren können.

How to create a LinkedIn job scraper in Python with Crawlee

Lasst uns beginnen.


Voraussetzungen

Beginnen wir mit der Erstellung eines neuen Crawlee for Python-Projekts mit diesem Befehl:

pipx run crawlee create linkedin-scraper

Wählen Sie PlaywrightCrawler im Terminal aus, wenn Crawlee danach fragt.

Nach der Installation erstellt Crawlee für Python Boilerplate-Code für Sie. Sie können das Verzeichnis (cd) in den Projektordner ändern und diesen Befehl ausführen, um Abhängigkeiten zu installieren.

poetry install

Wir werden mit der Bearbeitung der uns von Crawlee bereitgestellten Dateien beginnen, damit wir unseren Scraper erstellen können.

Hinweis
Bevor Sie fortfahren, wenn Sie diesen Blog gerne lesen, würden wir uns sehr freuen, wenn Sie Crawlee für Python einen Stern auf GitHub geben würden!

Starken Sie uns auf GitHub ⭐️

Erstellen Sie mit Crawlee den LinkedIn Job Scraper in Python

In diesem Abschnitt erstellen wir den Scraper mit dem Crawlee for Python-Paket. Um mehr über Crawlee zu erfahren, schauen Sie sich die Dokumentation an.

1. Überprüfen Sie die LinkedIn-Jobsuchseite

Öffnen Sie LinkedIn in Ihrem Webbrowser und melden Sie sich von der Website ab (wenn Sie bereits über ein Konto angemeldet sind). Sie sollten eine Schnittstelle wie diese sehen.

How to create a LinkedIn job scraper in Python with Crawlee

Navigieren Sie zum Abschnitt „Jobs“, suchen Sie nach einem Job und Standort Ihrer Wahl und kopieren Sie die URL.

How to create a LinkedIn job scraper in Python with Crawlee

Sie sollten so etwas haben:

https://www.linkedin.com/jobs/search?keywords=Backend Developer&location=Canada&geoId=101174742&trk=public_jobs_jobs-search-bar_search-submit&position=1&pageNum=0

Wir konzentrieren uns auf die Suchparameter, das ist der Teil, der nach „?“ steht. Die Schlüsselwort- und Standortparameter sind für uns die wichtigsten.

Die vom Benutzer angegebene Berufsbezeichnung wird in den Schlüsselwortparameter eingegeben, während der vom Benutzer angegebene Standort in den Standortparameter eingegeben wird. Zuletzt wird der geoId-Parameter entfernt, während die anderen Parameter konstant bleiben.

Wir werden Änderungen an unserer main.py-Datei vornehmen. Kopieren Sie den folgenden Code und fügen Sie ihn in Ihre main.py-Datei ein.

from crawlee.playwright_crawler import PlaywrightCrawler
from .routes import router                                     
import urllib.parse

async def main(title: str, location: str, data_name: str) -> None:
    base_url = "https://www.linkedin.com/jobs/search"

    # URL encode the parameters
    params = {
        "keywords": title,
        "location": location,
        "trk": "public_jobs_jobs-search-bar_search-submit",
        "position": "1",
        "pageNum": "0"
    }

    encoded_params = urlencode(params)

    # Encode parameters into a query string
    query_string = '?' + encoded_params

    # Combine base URL with the encoded query string
    encoded_url = urljoin(base_url, "") + query_string

    # Initialize the crawler
    crawler = PlaywrightCrawler(
        request_handler=router,
    )

    # Run the crawler with the initial list of URLs
    await crawler.run([encoded_url])

    # Save the data in a CSV file
    output_file = f"{data_name}.csv"
    await crawler.export_data(output_file)

Nachdem wir die URL codiert haben, besteht der nächste Schritt für uns darin, den generierten Router für die Verarbeitung von LinkedIn-Stellenausschreibungen anzupassen.

2. Routing Ihres Crawlers

Wir werden zwei Handler für Ihre Anwendung verwenden:

  • Standardhandler

Der default_handler verarbeitet die Start-URL

  • Stellenanzeige

Der job_listing-Handler extrahiert die einzelnen Jobdetails.

Der Playwright-Crawler durchsucht die Seite mit den Stellenausschreibungen und extrahiert die Links zu allen Stellenausschreibungen auf der Seite.

How to create a LinkedIn job scraper in Python with Crawlee

Wenn Sie die Stellenausschreibungen untersuchen, werden Sie feststellen, dass sich die Links zu Stellenausschreibungen in einer geordneten Liste mit einer Klasse namens jobs-search__results-list befinden. Anschließend extrahieren wir die Links mithilfe des Playwright-Locator-Objekts und fügen sie zur Verarbeitung zur Route „job_listing“ hinzu.

router = Router[PlaywrightCrawlingContext]()

@router.default_handler
async def default_handler(context: PlaywrightCrawlingContext) -> None:
    """Default request handler."""

    #select all the links for the job posting on the page
    hrefs = await context.page.locator('ul.jobs-search__results-list a').evaluate_all("links => links.map(link => link.href)")

    #add all the links to the job listing route
    await context.add_requests(
            [Request.from_url(rec, label='job_listing') for rec in hrefs]
        )

Da wir nun die Stellenausschreibungen haben, besteht der nächste Schritt darin, deren Details zu extrahieren.

Wir extrahieren den Titel jeder Stelle, den Firmennamen, den Zeitpunkt der Veröffentlichung und den Link zur Stellenanzeige. Öffnen Sie Ihre Entwicklungstools, um jedes Element mithilfe seines CSS-Selektors zu extrahieren.

How to create a LinkedIn job scraper in Python with Crawlee

Nachdem wir alle Einträge gelöscht haben, entfernen wir Sonderzeichen aus dem Text, um ihn zu bereinigen, und verschieben die Daten mithilfe der Funktion context.push_data in den lokalen Speicher.

@router.handler('job_listing')
async def listing_handler(context: PlaywrightCrawlingContext) -> None:
    """Handler for job listings."""

    await context.page.wait_for_load_state('load')

    job_title = await context.page.locator('div.top-card-layout__entity-info h1.top-card-layout__title').text_content()

    company_name  = await context.page.locator('span.topcard__flavor a').text_content()   

    time_of_posting= await context.page.locator('div.topcard__flavor-row span.posted-time-ago__text').text_content()


    await context.push_data(
        {
            # we are making use of regex to remove special characters for the extracted texts

            'title': re.sub(r'[\s\n]+', '', job_title),
            'Company name': re.sub(r'[\s\n]+', '', company_name),
            'Time of posting': re.sub(r'[\s\n]+', '', time_of_posting),
            'url': context.request.loaded_url,
        }
    )

3. Creating your application

For this project, we will be using Streamlit for the web application. Before we proceed, we are going to create a new file named app.py in your project directory. In addition, ensure you have Streamlit installed in your global Python environment before proceeding with this section.

import streamlit as st
import subprocess

# Streamlit form for inputs 
st.title("LinkedIn Job Scraper")

with st.form("scraper_form"):
    title = st.text_input("Job Title", value="backend developer")
    location = st.text_input("Job Location", value="newyork")
    data_name = st.text_input("Output File Name", value="backend_jobs")

    submit_button = st.form_submit_button("Run Scraper")

if submit_button:

    # Run the scraping script with the form inputs
    command = f"""poetry run python -m linkedin-scraper --title "{title}"  --location "{location}" --data_name "{data_name}" """

    with st.spinner("Crawling in progress..."):
         # Execute the command and display the results
        result = subprocess.run(command, shell=True, capture_output=True, text=True)

        st.write("Script Output:")
        st.text(result.stdout)

        if result.returncode == 0:
            st.success(f"Data successfully saved in {data_name}.csv")
        else:
            st.error(f"Error: {result.stderr}")

The Streamlit web application takes in the user's input and uses the Python Subprocess package to run the Crawlee scraping script.

4. Testing your app

Before we test the application, we need to make a little modification to the __main__ file in order for it to accommodate the command line arguments.

import asyncio
import argparse

from .main import main

def get_args():
    # ArgumentParser object to capture command-line arguments
    parser = argparse.ArgumentParser(description="Crawl LinkedIn job listings")


    # Define the arguments
    parser.add_argument("--title", type=str, required=True, help="Job title")
    parser.add_argument("--location", type=str, required=True, help="Job location")
    parser.add_argument("--data_name", type=str, required=True, help="Name for the output CSV file")


    # Parse the arguments
    return parser.parse_args()

if __name__ == '__main__':
    args = get_args()
    # Run the main function with the parsed command-line arguments
    asyncio.run(main(args.title, args.location, args.data_name))

We will start the Streamlit application by running this code in the terminal:

streamlit run app.py

This is what your application what the application should look like on the browser:

How to create a LinkedIn job scraper in Python with Crawlee

You will get this interface showing you that the scraping has been completed:

How to create a LinkedIn job scraper in Python with Crawlee

To access the scraped data, go over to your project directory and open the CSV file.

How to create a LinkedIn job scraper in Python with Crawlee

You should have something like this as the output of your CSV file.

Conclusion

In this tutorial, we have learned how to build an application that can scrape job posting data from LinkedIn using Crawlee. Have fun building great scraping applications with Crawlee.

You can find the complete working Crawler code here on the GitHub repository..

Follow Crawlee for more content like this.

How to create a LinkedIn job scraper in Python with Crawlee

Crawlee

Crawlee is a web scraping and browser automation library. It helps you build reliable crawlers. Fast.

Thank you!

Das obige ist der detaillierte Inhalt vonSo erstellen Sie mit Crawlee einen LinkedIn-Job-Scraper in Python. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Python vs. C: Lernkurven und BenutzerfreundlichkeitPython vs. C: Lernkurven und BenutzerfreundlichkeitApr 19, 2025 am 12:20 AM

Python ist leichter zu lernen und zu verwenden, während C leistungsfähiger, aber komplexer ist. 1. Python -Syntax ist prägnant und für Anfänger geeignet. Durch die dynamische Tippen und die automatische Speicherverwaltung können Sie die Verwendung einfach zu verwenden, kann jedoch zur Laufzeitfehler führen. 2.C bietet Steuerung und erweiterte Funktionen auf niedrigem Niveau, geeignet für Hochleistungsanwendungen, hat jedoch einen hohen Lernschwellenwert und erfordert manuellem Speicher und Typensicherheitsmanagement.

Python vs. C: Speicherverwaltung und KontrollePython vs. C: Speicherverwaltung und KontrolleApr 19, 2025 am 12:17 AM

Python und C haben signifikante Unterschiede in der Speicherverwaltung und -kontrolle. 1. Python verwendet die automatische Speicherverwaltung, basierend auf der Referenzzählung und der Müllsammlung, um die Arbeit von Programmierern zu vereinfachen. 2.C erfordert eine manuelle Speicherverwaltung und liefert mehr Kontrolle, aber die Komplexität und das Fehlerrisiko. Welche Sprache zu wählen sollte, sollte auf Projektanforderungen und Teamtechnologie -Stack basieren.

Python für wissenschaftliches Computer: Ein detailliertes AussehenPython für wissenschaftliches Computer: Ein detailliertes AussehenApr 19, 2025 am 12:15 AM

Zu den Anwendungen von Python im wissenschaftlichen Computer gehören Datenanalyse, maschinelles Lernen, numerische Simulation und Visualisierung. 1.Numpy bietet effiziente mehrdimensionale Arrays und mathematische Funktionen. 2. Scipy erweitert die Numpy -Funktionalität und bietet Optimierungs- und lineare Algebra -Tools. 3.. Pandas wird zur Datenverarbeitung und -analyse verwendet. 4.Matplotlib wird verwendet, um verschiedene Grafiken und visuelle Ergebnisse zu erzeugen.

Python und C: Das richtige Werkzeug findenPython und C: Das richtige Werkzeug findenApr 19, 2025 am 12:04 AM

Ob die Auswahl von Python oder C von den Projektanforderungen abhängt: 1) Python eignet sich aufgrund seiner prägnanten Syntax und reichhaltigen Bibliotheken für schnelle Entwicklung, Datenwissenschaft und Skripten; 2) C ist für Szenarien geeignet, die aufgrund seiner Zusammenstellung und des manuellen Speichermanagements eine hohe Leistung und die zugrunde liegende Kontrolle erfordern, wie z. B. Systemprogrammierung und Spielentwicklung.

Python für Datenwissenschaft und maschinelles LernenPython für Datenwissenschaft und maschinelles LernenApr 19, 2025 am 12:02 AM

Python wird in Datenwissenschaft und maschinellem Lernen häufig verwendet, wobei hauptsächlich auf seine Einfachheit und ein leistungsstarkes Bibliotheksökosystem beruhen. 1) Pandas wird zur Datenverarbeitung und -analyse verwendet, 2) Numpy liefert effiziente numerische Berechnungen, und 3) Scikit-Learn wird für die Konstruktion und Optimierung des maschinellen Lernens verwendet. Diese Bibliotheken machen Python zu einem idealen Werkzeug für Datenwissenschaft und maschinelles Lernen.

Python lernen: Ist 2 Stunden tägliches Studium ausreichend?Python lernen: Ist 2 Stunden tägliches Studium ausreichend?Apr 18, 2025 am 12:22 AM

Ist es genug, um Python für zwei Stunden am Tag zu lernen? Es hängt von Ihren Zielen und Lernmethoden ab. 1) Entwickeln Sie einen klaren Lernplan, 2) Wählen Sie geeignete Lernressourcen und -methoden aus, 3) praktizieren und prüfen und konsolidieren Sie praktische Praxis und Überprüfung und konsolidieren Sie und Sie können die Grundkenntnisse und die erweiterten Funktionen von Python während dieser Zeit nach und nach beherrschen.

Python für die Webentwicklung: SchlüsselanwendungenPython für die Webentwicklung: SchlüsselanwendungenApr 18, 2025 am 12:20 AM

Zu den wichtigsten Anwendungen von Python in der Webentwicklung gehören die Verwendung von Django- und Flask -Frameworks, API -Entwicklung, Datenanalyse und Visualisierung, maschinelles Lernen und KI sowie Leistungsoptimierung. 1. Django und Flask Framework: Django eignet sich für die schnelle Entwicklung komplexer Anwendungen, und Flask eignet sich für kleine oder hochmobile Projekte. 2. API -Entwicklung: Verwenden Sie Flask oder Djangorestframework, um RESTFUFFUPI zu erstellen. 3. Datenanalyse und Visualisierung: Verwenden Sie Python, um Daten zu verarbeiten und über die Webschnittstelle anzuzeigen. 4. Maschinelles Lernen und KI: Python wird verwendet, um intelligente Webanwendungen zu erstellen. 5. Leistungsoptimierung: optimiert durch asynchrones Programmieren, Caching und Code

Python vs. C: Erforschung von Leistung und Effizienz erforschenPython vs. C: Erforschung von Leistung und Effizienz erforschenApr 18, 2025 am 12:20 AM

Python ist in der Entwicklungseffizienz besser als C, aber C ist in der Ausführungsleistung höher. 1. Pythons prägnante Syntax und reiche Bibliotheken verbessern die Entwicklungseffizienz. 2. Die Kompilierungsmerkmale von Compilation und die Hardwarekontrolle verbessern die Ausführungsleistung. Bei einer Auswahl müssen Sie die Entwicklungsgeschwindigkeit und die Ausführungseffizienz basierend auf den Projektanforderungen abwägen.

See all articles

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

AI Hentai Generator

AI Hentai Generator

Erstellen Sie kostenlos Ai Hentai.

Heiße Werkzeuge

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

MinGW – Minimalistisches GNU für Windows

MinGW – Minimalistisches GNU für Windows

Dieses Projekt wird derzeit auf osdn.net/projects/mingw migriert. Sie können uns dort weiterhin folgen. MinGW: Eine native Windows-Portierung der GNU Compiler Collection (GCC), frei verteilbare Importbibliotheken und Header-Dateien zum Erstellen nativer Windows-Anwendungen, einschließlich Erweiterungen der MSVC-Laufzeit zur Unterstützung der C99-Funktionalität. Die gesamte MinGW-Software kann auf 64-Bit-Windows-Plattformen ausgeführt werden.

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

mPDF

mPDF

mPDF ist eine PHP-Bibliothek, die PDF-Dateien aus UTF-8-codiertem HTML generieren kann. Der ursprüngliche Autor, Ian Back, hat mPDF geschrieben, um PDF-Dateien „on the fly“ von seiner Website auszugeben und verschiedene Sprachen zu verarbeiten. Es ist langsamer und erzeugt bei der Verwendung von Unicode-Schriftarten größere Dateien als Originalskripte wie HTML2FPDF, unterstützt aber CSS-Stile usw. und verfügt über viele Verbesserungen. Unterstützt fast alle Sprachen, einschließlich RTL (Arabisch und Hebräisch) und CJK (Chinesisch, Japanisch und Koreanisch). Unterstützt verschachtelte Elemente auf Blockebene (wie P, DIV),

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung