1. Hava API ilə işləmək
Artıq əsasları öyrəndik, indi real bir ssenariyə baxaq. Təsəvvür edin ki, bizə hər 30 dəqiqədə hava barədə məlumat toplamaq lazımdır. Bunun üçün havanın əldə olunması üçün API-dən istifadə edəcəyik. Təbii ki, öyrənmə məqsədləri üçün həqiqi API istifadəsi məhdud ola bilər, ona görə bu vəziyyətin necə görünə biləcəyini təsəvvür edək.
OpenWeather API vasitəsilə cari havanı əldə etmək
Bu misalda requests
vasitəsilə xüsusi bir şəhərdəki hava məlumatlarını API OpenWeather-dən necə əldə edəcəyimizi göstəririk.
import schedule
import time
import requests
def fetch_weather(city):
api_key = "YOUR_API_KEY" # OpenWeather üçün API açarınızı buraya daxil edin
url = f"http://api.openweathermap.org/data/2.5/weather?q={city}&appid={api_key}&units=metric"
try:
response = requests.get(url)
response.raise_for_status()
data = response.json()
temperature = data["main"]["temp"]
weather_description = data["weather"][0]["description"]
print(f"{city}-də cari temperatur: {temperature}°C")
print(f"Havanın təsviri: {weather_description}")
except requests.exceptions.RequestException as e:
print(f"Hava məlumatlarını alarkən xəta baş verdi: {e}")
def fetch_weather_of_london():
fetch_weather("London")
# Hər 30 dəqiqədə bir tapşırığın yerinə yetirilməsini tənzimləyin
schedule.every(30).minutes.do(fetch_weather_of_london)
while True:
schedule.run_pending()
time.sleep(1)
Burada biz şəhər üçün cari hava məlumatlarını əldə etmək məqsədilə API OpenWeather-ə GET sorğusu göndəririk. JSON cavabında temperaturu və hava təsvirini çıxarırıq və ekrana yazdırırıq. Açarı YOUR_API_KEY
öz API açarınızla dəyişməyi unutmayın.
Valyuta məzənnələrinin API ilə əldə olunması
Bu misalda biz API vasitəsilə cari valyuta məzənnələrini almaq üçün requests
-dən istifadə edəcəyik.
import schedule
import time
import requests
def fetch_exchange_rate():
url = "https://api.exchangerate-api.com/v4/latest/USD"
try:
response = requests.get(url)
response.raise_for_status() # Sorğunun uğurlu yerinə yetirildiyini yoxla
data = response.json()
usd_to_eur = data["rates"]["EUR"]
print(f"USD-dən EUR-a cari məzənnə: {usd_to_eur}")
except requests.exceptions.RequestException as e:
print(f"Məlumatları əldə edərkən xəta baş verdi: {e}")
# Hər 10 dəqiqədə bir tapşırığın yerinə yetirilməsini tənzimləyin
schedule.every(10).minutes.do(fetch_exchange_rate)
while True:
schedule.run_pending()
time.sleep(1)
Burada biz valyuta məzənnəsi API-ə GET sorğusu göndəririk və JSON formatında məlumat alırıq. USD-dən EUR-a məzənnəni JSON cavabından çıxarırıq və ekrana yazdırırıq. Bu skript digər valyuta cütləri üçün məlumat toplamaq məqsədilə dəyişdirilə bilər, data["rates"]
-da açarı dəyişərək.
Bu skript vasitəsilə biz hava məlumatlarını və valyuta məlumatlarını davamlı şəkildə toplaya bilərik. Yaxşı başlanğıc sayılar, elə deyilmi?
Həqiqi istifadə ssenariləri
Məlumatların avtomatik toplanması müxtəlif ssenarilərdə faydalı ola bilər:
- Serverlərin vəziyyətini monitorinq etmək: Server vəziyyətinin avtomatik yoxlamaları, problemlərin baş vermədən əvvəl müəyyən olunmasına və xəbərdarlıq edilməsinə kömək edə bilər.
- Sosial şəbəkələrdən məlumat toplamaq: Trendlərin və marka haqqında qeyd edilmələrin davamlı analizi.
- Valyuta məzənnələrinin izlənməsi: Valyuta məzənnəsindəki dəyişikliklər iş və ya şəxsi ehtiyaclar üçün faydalı ola bilər.
2. Veb məlumatlarının avtomatlaşdırılmış toplanmasına misal
Əgər biz veb-səhifədən məlumat toplamaq istəyiriksə nə etməli? Məsələn, xəbər başlıqlarını müntəzəm olaraq yoxlamaq istəyirik. Bunun üçün bizə BeautifulSoup
və requests
kömək edəcək.
Veb-səhifədən məlumatların toplanması
Tutaq ki, biz xəbər başlıqlarını toplamaq istədiyimiz bir saytımız var. Bunu belə edə bilərik:
import requests
from bs4 import BeautifulSoup
def fetch_news():
response = requests.get("http://example.com/news")
soup = BeautifulSoup(response.content, 'html.parser')
for headline in soup.find_all('h2', class_='news'):
print(headline.text)
schedule.every().hour.do(fetch_news)
while True:
schedule.run_pending()
time.sleep(1)
Bu nümunədə hər 60 dəqiqədən bir skriptimiz veb-səhifəni yoxlayacaq və xəbər başlıqlarını çıxaracaq. Bu, aktual məlumatların alınması prosesini sadələşdirir.
Veb-saytdan xəbər başlıqlarının toplanması
Bu nümunədə biz requests
ilə HTML səhifəsini yükləyəcəyik və BeautifulSoup
ilə xəbər başlıqlarını parse edəcəyik.
import requests
from bs4 import BeautifulSoup
def fetch_news_headlines():
url = "https://www.bbc.com/news"
try:
response = requests.get(url)
response.raise_for_status()
soup = BeautifulSoup(response.text, 'html.parser')
headlines = soup.find_all('h3') # Bütün <h3> teqlərini axtarırıq (adətən burada başlıqlar olur)
print("BBC-də son xəbərin başlıqları:")
for headline in headlines[:5]: # İlk 5 başlığı götürürük
print("-", headline.get_text(strip=True))
except requests.exceptions.RequestException as e:
print(f"Məlumat əldə edərkən xəta baş verdi: {e}")
fetch_news_headlines()
Burada biz BBC News səhifəsini yükləyib BeautifulSoup
vasitəsilə bütün <h3>
teqləri tapırıq, harada ki xəbər başlıqları var. İlk 5 başlığı çıxarırıq və artıq boşluqları və simvolları çıxarmaq üçün strip=True
istifadə edirik.
İnternet-mağazadan məhsul qiymətlərinin toplanması
Bu nümunə, internet-mağaza (məsələn, Amazon və ya digər bir mağazadan) məhsul qiymətlərinin necə çıxarılacağını göstərir. requests
ilə səhifə sorğusu göndərir və BeautifulSoup
vasitəsilə qiymətləri parse edirik.
import requests
from bs4 import BeautifulSoup
def fetch_product_price(url):
headers = {
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.82 Safari/537.36"
}
try:
response = requests.get(url, headers=headers)
response.raise_for_status()
soup = BeautifulSoup(response.text, 'html.parser')
product_name = soup.find('span', {'id': 'productTitle'}).get_text(strip=True)
price = soup.find('span', {'class': 'a-price-whole'}).get_text(strip=True)
print(f"Məhsul: {product_name}")
print(f"Qiymət: {price} AZN")
except requests.exceptions.RequestException as e:
print(f"Məlumat əldə edərkən xəta baş verdi: {e}")
except AttributeError:
print("Məhsul və ya qiymət ilə bağlı məlumat tapılmadı")
# Məhsul üçün link nümunəsi
fetch_product_price("https://www.amazon.com/dp/B08N5WRWNW")
Bu nümunədə biz User-Agent
başlığı ilə GET-sorğu göndəririk ki, bloklanmadan yayınaq. Daha sonra, istifadə edərək BeautifulSoup
, biz id="productTitle"
ilə məhsul adını və a-price-whole
sinifinə görə məhsul qiymətini tapırıq. Boşluqları çıxarmaq üçün strip=True
istifadə olunur.
GO TO FULL VERSION