Välj en sida

Bevakar Blocket med Web Scraping i Python

av jun 13, 2020

Efter stora problem med Blockets inbyggda bevakningstjänst för nya annonser så bestämde jag mig för att göra en egen! Vi använder oss av Beautiful Soup-modulen för att skrapa Blockets sidor efter data. När vi får vårt program att fungera, så låter jag programmet skicka ett sms till min telefon när det dyker upp nya annonser (med hjälp av 46elks API för att skicka SMS).

Videon ”Bevakar Blocket med Python” hittar du på vår YouTube-kanal: https://youtu.be/T3VMn289QVc

Koden för huvudfilen, blocket.py hittar du här nedan. Glöm inte att också eventuellt skapa secret.py enligt instruktioner i videon. Lycka till!

import requests
from bs4 import BeautifulSoup
import time
import secret

URL = "https://www.blocket.se/annonser/hela_sverige"
API_PASSWORD = secret.API_PASSWORD
API_USERNAME = secret.API_USERNAME
phone = secret.phone

def parse_site(url):
    page = requests.get(url)
    soup = BeautifulSoup(page.content, "html.parser")
    return soup

def get_latest_ad():
    soup = parse_site(URL)
    ad_elems = soup.find_all("article", class_="hidZFy")
    latest_ad = ad_elems[0]

    # hitta namn, pris och url
    ad_name = latest_ad.find("span", class_ = "jzzuDW").text
    ad_price = latest_ad.find("div", class_ = "bNwNaE").text
    ad_url = latest_ad.find("a", class_="enigRj")["href"]

    return ad_name, ad_price, ad_url

# skickar sms
def send_sms(name, price, url):
    message = "***NY ANNONS***\n" + name + "\n" + price + "\n" + "https://blocket.se" + url
    requests.post(
        'https://api.46elks.com/a1/sms',
        auth=(API_USERNAME, API_PASSWORD),
        data={
            'from': 'Annonsalarm',
            'to': phone,
            'message': message
        }
    )


prev_ad_name, prev_ad_price, prev_ad_url = get_latest_ad()
print("Senaste annonsen: ", prev_ad_name, ": ", prev_ad_price)
print("Url: ", prev_ad_url)

while True:
    time.sleep(5)
    ad_name, ad_price, ad_url = get_latest_ad()

    if ad_name == prev_ad_name:
        # inga nya annonser
        t = time.localtime()
        current_time = time.strftime("%H:%M:%S",t)
        print("Ingen ny annons hittad...", current_time)
    else:
        # ny annons hittad!!!!
        print("Ny annons: " + ad_name)
        send_sms(ad_name,ad_price, ad_url)
        prev_ad_name = ad_name

Unga Programmerare håller kurser i programmering för barn och ungdomar. Unga Programmerare startades av studenter från Chalmers Tekniska Högskola.

Följ oss

Nyhetsbrev