


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.
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.
Navigieren Sie zum Abschnitt „Jobs“, suchen Sie nach einem Job und Standort Ihrer Wahl und kopieren Sie die URL.
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.
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.
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:
You will get this interface showing you that the scraping has been completed:
To access the scraped data, go over to your project directory and open the CSV file.
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.

Crawlee
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!

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 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.

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.

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 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.

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.

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 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.


Heiße KI -Werkzeuge

Undresser.AI Undress
KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover
Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool
Ausziehbilder kostenlos

Clothoff.io
KI-Kleiderentferner

AI Hentai Generator
Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

Heiße Werkzeuge

SublimeText3 chinesische Version
Chinesische Version, sehr einfach zu bedienen

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
Visuelle Webentwicklungstools

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
Leistungsstarke integrierte PHP-Entwicklungsumgebung