De eenvoud en het aanpassingsvermogen van Python hebben ertoe bijgedragen dat het door de jaren heen aan populariteit heeft gewonnen. Handige data haal je gemakkelijk via internet op met Python. Die data kun je vervolgens gebruiken om een ​​praktische toepassing aan te sturen.

Leer hoe u realtime weergegevens kunt vinden met behulp van webscraping en API's. U kunt deze opgehaalde gegevens gebruiken om een ​​eenvoudige weertoepassing te ontwikkelen.

Ontvang actuele weerdetails van een stad met behulp van webscraping

Webscraping is het proces van het extraheren van gegevens en inhoud van een website. Autonoom gegevens ophalen van internet opent veel gebruiksscenario's. Maar de meeste van deze gegevens zijn in HTML-indeling, die u moet ontleden en inspecteren om relevante gegevens te extraheren.

U kunt live weergegevens van elke stad extraheren met behulp van webschrapen. De BeautifulSoup-bibliotheek van Python is de go-to-bibliotheek om gegevens uit HTML- en XML-bestanden te halen. U moet de BeautifulSoup Python-bibliotheek via pip installeren om het schraapproces te starten. Voer de volgende opdracht uit in de terminal om de BeautifulSoup- en verzoekbibliotheken te installeren:

instagram viewer

Pip installeren beautifulsoup4 verzoeken

Nadat je de vereiste bibliotheken hebt geïnstalleerd, begin je ze met het importeren in je code:

De code die in dit project wordt gebruikt, is beschikbaar in een GitHub-opslagplaats en is gratis voor u om te gebruiken onder de MIT-licentie.

van bs4 importeren Mooie Soep
importeren aanvragen

Vervolgens moet u de headerdetails opgeven zodat de client en de server aanvullende informatie kunnen doorgeven met een HTTP-verzoek of -antwoord:

koppen = {
'Gebruiker-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, zoals Gecko) Chrome/58.0.3029.110 Safari/537.3'
}

Maak een functie, vind_weer(), om een ​​zoekopdracht naar Google te sturen met behulp van de aanvragen.get() methode. U gebruikt een zoek-URL om het weer van een stad te krijgen en schraapt vervolgens de betekenisvolle gegevens om locatie, temperatuur, tijd en weerbeschrijving te krijgen. Gebruik vervolgens BeautifulSoup om het ontvangen HTML-antwoord te ontleden:

defvind_weer(stads naam):
city_name = city_name.replace("", "+")

poging:
res = aanvragen.get(
F'https://www.google.com/search? q={city_name}&oq={city_name}&aqs=chrome.0.35i39l2j0l4j46j69i60.6128j1j7&sourceid=chrome&ie=UTF-8', kopteksten=kopteksten)

afdrukken("Bezig met laden...")

soup = BeautifulSoup (res.text, 'html.parser')
locatie = soup.select('#wob_loc')[0].getText().strip()
tijd = soep.select('#wob_dts')[0].getText().strip()
info = soep.select('#wob_dc')[0].getText().strip()
temperatuur = soep.select('#wob_tm')[0].getText().strip()

afdrukken("Plaats: " + locatie)
afdrukken("Temperatuur: " + temperatuur + "°C")
afdrukken("Tijd: " + tijd)
afdrukken("Weer Beschrijving: " + info)
behalve:
afdrukken("Voer een geldige plaatsnaam in")

Om de element-ID's te extraheren, voert u een Google-zoekopdracht uit en inspecteert u de pagina in uw browser met behulp van webtools. U moet het element inspecteren om de ID's te vinden van het HTML-element waarvoor u gegevens wilt extraheren:

Geef deze ID's vervolgens door aan de selecteer() methode. Deze methode voert een CSS-kiezer uit tegen het geparseerde document en retourneert alle overeenkomende elementen. De getText() methode extraheert de tekst uit het HTML-element. De strip() methode verwijdert alle voorafgaande en afsluitende witruimtetekens uit de tekst. Nadat u een schone waarde hebt geëxtraheerd, kunt u deze opslaan in een variabele.

Vraag de gebruiker ten slotte om een ​​stad in te voeren en deze door te geven aan de vind_weer functie:

city_name = invoer("Voer plaatsnaam in: ")
stadsnaam = stadsnaam + " weer"
find_weather (stadsnaam)

Wanneer u nu de code uitvoert, wordt u gevraagd een stadsnaam in te voeren. U moet een geldige stadsnaam invoeren om de resultaten te krijgen, anders genereert de code een uitzondering.

Krijg actuele weerdetails van een stad met behulp van de OpenWeatherMap API

OpenWeatherMap is een online service, eigendom van OpenWeather Ltd. De API biedt wereldwijde weergegevens, waaronder het huidige weer, prognoses en gegevens uit het verleden voor elke locatie. De gratis laag van de OpenWeatherMap API biedt actuele weergegevens met een limiet van 60 oproepen/minuut. U moet een account aanmaken op OpenWeatherMap om uw eigen API-sleutel te krijgen.

Push de code niet met de API-sleutel naar een openbare repository, aangezien iedereen met toegang tot uw bronbestanden uw sleutel kan zien en stelen. Overweeg in een productie-app de API-sleutelgegevens verplaatsen naar een .env-bestand voor verbeterde beveiliging.

Ga naar OpenWeatherMap's website en maak een gratis account aan. Nadat je het account hebt aangemaakt, kun je je API-sleutels vinden op de Mijn API-sleutels bladzijde. U kunt de standaard API-sleutel van OpenWeatherMap gebruiken of er zelf een genereren. OpenWeatherMap biedt de ondersteuning om zoveel API-sleutels te genereren als nodig is voor uw projecten.

Nu bent u klaar om de live weergegevens op te halen.

# Bibliotheken importeren
importeren aanvragen
importeren json

# Voer hier uw OpenWeatherMap API-sleutel in
# Push het NIET naar een openbare repository
API_Key = "Uw_API_sleutel"

# Geef een geldige plaatsnaam op
city_name = invoer("Vul plaatsnaam in: ")

# Constructie van het API URL-pad
URL = f"http://api.openweathermap.org/data/2.5/weather? q={city_name}&appid={API_Key}"

# Een get-verzoek indienen bij de API
antwoord = verzoeken.get (url)

# JSON-antwoord converteren naar een woordenboek
res = antwoord.json()

# Verwijder het commentaar op de volgende regel om alles te zien
# gegevens die zijn opgehaald uit de API
# afdrukken (res)

# Controleren of de stad is gevonden
# Als de waarde van "kabeljauw" niet 404 is,
# dat betekent dat de stad gevonden is
als res["kabeljauw"] != "404":
gegevens = res["voornaamst"]

# Opslaan van de live temperatuurgegevens
live_temperatuur = gegevens["temp"]

# Opslaan van de live drukgegevens
live_druk = gegevens["druk"]
desc = res["weer"]

# Opslaan van de weerbeschrijving
weather_description = desc[0]["beschrijving"]
afdrukken("Temperatuur (in Kelvin-schaal): " + str (live_temperatuur))
afdrukken("Druk: " + str (live_druk))
afdrukken("Beschrijving: " + str (weer_beschrijving))

anders:
# Als de stad niet wordt gevonden,
# dit codeblok wordt uitgevoerd
afdrukken("Voer een geldige plaatsnaam in")

Als u een geldige API-sleutel opgeeft en de juiste plaatsnaam invoert, ontvangt u de gegevens van de API in JSON-indeling. Vervolgens moet u deze gegevens in JSON-indeling converteren naar een Python-object met behulp van de json() methode om verdere bewerkingen uit te voeren. Als de stad is gevonden, moet je het dict-object oplossen (res) om de vereiste informatie te extraheren.

Ontwikkel een weertoepassing met behulp van de live weergegevens

Nu je hebt geleerd hoe je live data kunt ophalen met de OpenWeatherMap API, ben je klaar om er een eenvoudige weerapplicatie mee te ontwikkelen. Het bouwen van een weerapplicatie kan je helpen om toe te passen wat je weet en je Python-vaardigheden aan te scherpen.

Je handen vuil maken aan praktische projecten kan je een betere ontwikkelaar maken. Je kunt een aantal andere Python-projecten ontwikkelen, zoals een inlogsysteem, quiz-app of URL-verkorter om je Python-ontwikkelingsvaardigheden te verstevigen.